Галлио не может запустить тест с консоли - PullRequest
0 голосов
/ 08 сентября 2011

У меня проблема с запуском интеграционного теста через Gallio. Тест работает нормально, когда я запускаю его с Testdrive.NET или через встроенный Gallio в Visual Studio. Когда я пытаюсь запустить его через консоль (как это делают наши скрипты nant), это не удается. Получено следующее сообщение:

[не пройден] тест TenForce.Execution.Api2.OData.Tests / AttachmentIntegrationTests / ATT achmentUpload Выполнить System.ServiceModel.CommunicationObjectFaptedException: Объект связи, System.Data.Services.DataServiceHost, не может быть используется для связи, потому что он находится в состоянии неисправности. в System.ServiceModel.Channels.CommunicationObject.Close (TimeSpan тайм-аут) в System.ServiceModel.ServiceHostBase.System.IDisposable.Dispose () в TenForce.Execution.Api2.OData.Tests.IntegrationTests.AttachmentIntegration Tests.AttachmentUpload () в D: \ Users \ arne.de.herdt.TENFORCE2 \ Documents \ Developme нт \ Projects \ Robinson \ TenForce.Execution.Api2.OData.Tests \ IntegrationTests \ Attach mentIntegrationTests.cs: строка 83

Утилизация тестового бегуна. Время остановки: 16:45 (Общее время выполнения: 20,515 секунд)

1 прогон, 0 пройдено, 1 сбой, 0 безрезультатно, 0 пропущено

Полная командная строка выглядит следующим образом:

Gallio.Echo.exe / r: изолированный процесс TenFor ce.Execution.Api2.OData.Tests.dll /f:Namespace:TenForce.Execution.Api2.OData.Tes ts.IntegrationTests

Я понятия не имею, что вызывает эту проблему в Галлио. Он работает от VS, но не на агенте сборки или консоли. Исходный код теста таков:

using System.Data.Services;
using System.ServiceModel;
using System.ServiceModel.Description;

namespace TenForce.Execution.Api2.OData.Tests.IntegrationTests
{
    using System;
    using System.Collections.Generic;
    using System.ServiceModel.Web;
    using MbUnit.Framework;
    using Objects;
    using Helpers;
    using Test.Attributes;

    /// <summary>
    /// <para>This class contains all the integration tests to verify the correct working conditions for attachment entities.</para>
    /// </summary>
    public class AttachmentIntegrationTests : BaseIntegrationTest
    {
        /// <summary>
        /// <para>This test will try to create a new attachment on an item using a local file.</para>
        /// </summary>
        [Test, MaxDuration]
        public void AttachmentUpload()
        {
            #region Test Preparation

            // Prepare a Workspace
            var workspace = CreateWorkspaceObject();
            Assert.IsTrue(Factory.CreateApi().Workspaces.Create(workspace), "Expected the test workspace to be created.");

            // Prepare a List
            var list = CreateList();
            list.Workspace = workspace;
            list.ItemType = new ItemType {Id = 5};
            Assert.IsTrue(Factory.CreateApi().Lists.Create(list), "Expected the test list to be created.");

            // Prepare an Item.
            var itemFields = new List<ItemField>
                                     {
                                         new ItemField {FieldId = "SF19", Type = "List", ValueId = list.Id},
                                         new ItemField {FieldId = "SF2", Type = "Title", Value = string.Format("I {0}", DateTime.Now)},
                                         new ItemField {FieldId = "SF4", Type = "AssignedTo", ValueId = 1}
                                     };
            var item = new Item { ItemFields = itemFields.ToArray() };
            Assert.IsTrue(Factory.CreateApi().Items.Create(item), "Expected the test item to be created.");

            #endregion

            using (var host = new DataServiceHost(typeof (Web.Api), new[] {BaseUri}))
            {
                // Start the host
                host.Open();

                // Create a new WebClient to create a call to the attachments resource
                var client = new ODataClient {BaseUri = BaseUri, Username = "sadmin", Password = string.Empty};

                // Send the file contents to the service using the correct url.
                string response = client.UploadAttachment(GetTestFileLocation("ReportingTest.xls"), item.Id);
                var parser = new ODataParser();
                parser.LoadResponse(response);

                // Fetch the Id of the Attachment, this should be greater than 0.
                int attachmentId = parser.GetEntityId();
                Assert.IsTrue(attachmentId > 0, "Expected the Id to be greater than zero.");

                // Verify if the item is coupled to the correct Item.
                response = client.GetResource(string.Format("Attachments({0})/Item", attachmentId));
                parser.LoadResponse(response);
                int itemId = parser.GetEntityId();
                Assert.IsTrue(itemId == item.Id, "Expected the linked item to have a matching Id.");

                // Change the filename of the uploaded file and verify whether the file is properly renamed.
                client.UpdateProperty(string.Format("Items({0})/Attachments({1})/Filename/$value", itemId, attachmentId), "uploaded_excel.xls");

                // Verify if the changes made it to the database.
                Attachment att = Factory.CreateApi().Attachments.Read(attachmentId);
                Assert.AreEqual("uploaded_excel.xls", att.Filename, "Expected the data to be changed on the entity.");
                Assert.IsTrue(System.IO.File.Exists(Factory.CreateApi().Attachments.GetAttachmentPath(att, false)), "Expected the file to be present on the hard drive.");

                // Close the host properly
                host.Close();
            }
        }
    }
}

Я что-то упускаю из-за размещения DataService в модульном тесте?

РЕДАКТИРОВАТЬ 1 Выполнение следующей команды:

netsh http add urlacl url = http://+:60000/ODataService/ Пользователь = администратор

Решена часть проблемы. Теперь я могу без проблем запустить тест на моей системе разработки через консоль, но агенты сборки все еще не могут запустить тест. Они выдвигают следующий вывод:

ошибка Выполнить System.Net.WebException: удаленный сервер возвратил ошибка: (500) Внутренняя ошибка сервера. Статус: ProtocolError Ответ: System.Net.HttpWebResponse в System.Net.WebClient.UploadFile (Uri адрес, строковый метод, строковое имя файла) в System.Net.WebClient.UploadFile (адрес Uri, строковое имя файла) в System.Net.WebClient.UploadFile (строковый адрес, строковое имя файла) в TenForce.Execution.Api2.OData.Tests.Helpers.ODataClient.UploadAttachment (String путь, Int32 itemId) в C: \ Robinson \ ствол \ Projects \ Robinson \ TenForce.Execution.Api2.OData.Tests \ Helpers \ ODataClient.cs: линия 69 в TenForce.Execution.Api2.OData.Tests.IntegrationTests.AttachmentIntegrationTests.AttachmentUpload () в C: \ Robinson \ ствол \ Projects \ Robinson \ TenForce.Execution.Api2.OData.Tests \ IntegrationTests \ AttachmentIntegrationTests.cs: линия 89 ------- Stdout: ------- Невозможно прочитать раздел конфигурации общий / каротаж. Использование реализации без операции.

1 Ответ

0 голосов
/ 17 октября 2011

Мне потребовалось некоторое время, чтобы понять это, но проблема не в Галлио.Проблема заключается в инструментарии, используемом для разработки сервиса OData.Этот инструментарий не может работать из среды хостинга консоли.

После перемещения службы на удаленный сервер и написания тестов для удаленного вызова функций и анализа ответов мы получили ожидаемое поведение.

...