コード例 #1
0
        // for testing purposes only
        internal RunningSession StartSession(SessionStartInfo sessionStartInfo)
        {
            SyncTaskListener <RunningSession> listener = new SyncTaskListener <RunningSession>(logger: Logger, testIds: "TEST");

            StartSessionInternal(listener, sessionStartInfo);
            return(listener.Get());
        }
コード例 #2
0
        public void TestLongRequest_SimplePoll()
        {
            Logger          logger          = new Logger();
            ServerConnector serverConnector = new ServerConnector(logger);

            serverConnector.ServerUrl = new Uri(CommonData.DefaultServerUrl);
            MockHttpRestClientFactory mockHttpRestClientFactory = new MockHttpRestClientFactory(
                logger,
                new int?[] { 2, null, 3 },
                new string[] { CommonData.DefaultServerUrl + "url1", null, CommonData.DefaultServerUrl + "url2" });

            serverConnector.HttpRestClientFactory = mockHttpRestClientFactory;
            serverConnector.ApiKey = "testKey";

            SessionStartInfo startInfo = GetStartInfo();
            RunningSession   result    = serverConnector.StartSession(startInfo);

            var             requestCreator = mockHttpRestClientFactory.Provider.Handler;
            List <string>   requests       = requestCreator.RequestUrls;
            List <TimeSpan> timings        = requestCreator.Timings;

            Assert.AreEqual(6, requests.Count);
            Assert.AreEqual(6, timings.Count);
            StringAssert.StartsWith(CommonData.DefaultServerUrl + "api/sessions/running", requests[0]);
            StringAssert.StartsWith(CommonData.DefaultServerUrl + BASE_LOCATION + "status", requests[1]);

            StringAssert.StartsWith(CommonData.DefaultServerUrl + "url1", requests[2]);
            Assert.Greater(timings[2], TimeSpan.FromSeconds(2));

            StringAssert.StartsWith(CommonData.DefaultServerUrl + "url1", requests[3]);
            Assert.Greater(timings[3], TimeSpan.FromSeconds(0.5));

            StringAssert.StartsWith(CommonData.DefaultServerUrl + "url2", requests[4]);
            Assert.Greater(timings[4], TimeSpan.FromSeconds(3));
        }
コード例 #3
0
        private SessionStartInfo GetStartInfo()
        {
            PropertiesCollection sessionProperties = new PropertiesCollection
            {
                { "property 1", "value 1" },
                { null, null }
            };

            BatchInfo batchInfo = new BatchInfo("some batch", new DateTimeOffset(new DateTime(2017, 6, 29, 11, 1, 0, DateTimeKind.Utc)));

            batchInfo.Id = "someBatchId";

            SessionStartInfo sessionStartInfo = new SessionStartInfo(
                "agent",
                "some app",
                "1.0",
                "some test",
                batchInfo,
                "baseline",
                new AppEnvironment("windows", "test suite", new Size(234, 456))
            {
                DeviceInfo = "Some Mobile Device"
            },
                "some environment",
                new ImageMatchSettings(MatchLevel.Strict),
                "some branch",
                "parent branch",
                "baseline branch",
                saveDiffs: null,
                render: null,
                properties: sessionProperties);

            return(sessionStartInfo);
        }
コード例 #4
0
        public RunningSession Open(string testId, SessionStartInfo sessionStartInfo)
        {
            SyncTaskListener <RunningSession> listener = new SyncTaskListener <RunningSession>(logger: Logger, testIds: testId);

            openService_.Operate(testId, sessionStartInfo, listener);
            RunningSession result = listener.Get();

            if (result == null)
            {
                throw new EyesException("Failed starting session with the server", listener.Exception);
            }
            return(result);
        }
コード例 #5
0
        public void TestStartSession_LongRequest_IsNewField(bool isNew)
        {
            Logger          logger          = new Logger();
            ServerConnector serverConnector = new ServerConnector(logger);

            serverConnector.ServerUrl             = new Uri(CommonData.DefaultServerUrl);
            serverConnector.HttpRestClientFactory = new MockHttpRestClientFactory(isNew: isNew);
            serverConnector.ApiKey = "testKey";
            SessionStartInfo startInfo = GetStartInfo();
            RunningSession   result    = serverConnector.StartSession(startInfo);

            Assert.AreEqual(isNew, result.IsNewSession);
        }
コード例 #6
0
        public void TestSerialization()
        {
            PropertiesCollection sessionProperties = new PropertiesCollection
            {
                { "property 1", "value 1" },
                { null, null }
            };

            string agentRunId = "some-agent-run-id";

            BatchInfo batchInfo = new BatchInfo("some batch", new DateTimeOffset(new DateTime(2017, 6, 29, 11, 1, 0, DateTimeKind.Utc)));

            batchInfo.Id = "someBatchId";
            batchInfo.Properties.Add("prop 1", "val 1");
            batchInfo.AddProperty("prop 2", null);

            SessionStartInfo sessionStartInfo = new SessionStartInfo(
                "agent",
                "some app",
                "1.0",
                "some test",
                batchInfo,
                "baseline",
                new AppEnvironment("windows", "test suite", new RectangleSize(234, 456))
            {
                DeviceInfo = "Some Mobile Device"
            },
                "some environment",
                new ImageMatchSettings(MatchLevel.Strict)
            {
                Accessibility         = new AccessibilityRegionByRectangle[] { new AccessibilityRegionByRectangle(10, 20, 30, 40, AccessibilityRegionType.GraphicalObject) },
                AccessibilitySettings = new AccessibilitySettings(AccessibilityLevel.AA, AccessibilityGuidelinesVersion.WCAG_2_1),
                Floating = new FloatingMatchSettings[] { new FloatingMatchSettings(22, 32, 42, 52, 5, 10, 15, 20) }
            },
                "some branch",
                "parent branch",
                "baseline branch",
                saveDiffs: null,
                render: null,
                agentSessionId: "59436361-2782-45EF-9DC5-5633F15150CE",
                timeout: 10,
                properties: sessionProperties,
                agentRunId);

            string json         = JsonConvert.SerializeObject(sessionStartInfo, Formatting.Indented);
            string expectedJson = CommonUtils.ReadResourceFile("Test.Eyes.Sdk.Core.DotNet.Resources.SessionStartInfo_Serialization.json");

            Assert.AreEqual(expectedJson, json);
        }
コード例 #7
0
        public void TestStartSession_LongRequest_StatusCode(HttpStatusCode statusCode)
        {
            Logger          logger          = new Logger();
            ServerConnector serverConnector = new ServerConnector(logger);

            serverConnector.ServerUrl             = new Uri(CommonData.DefaultServerUrl);
            serverConnector.HttpRestClientFactory = new MockHttpRestClientFactory(statusCode: statusCode);
            serverConnector.ApiKey = "testKey";
            SessionStartInfo startInfo = GetStartInfo();
            RunningSession   result    = serverConnector.StartSession(startInfo);

            bool isNew = statusCode == HttpStatusCode.Created;

            Assert.AreEqual(isNew, result.IsNewSession);
        }
コード例 #8
0
        protected virtual void StartSessionInternal(TaskListener <RunningSession> taskListener, SessionStartInfo startInfo)
        {
            ArgumentGuard.NotNull(startInfo, nameof(startInfo));

            var body = new
            {
                StartInfo = startInfo
            };

            try
            {
                EnsureHttpClient_();
                httpClient_.PostJson(
                    new TaskListener <HttpResponseMessage>(
                        response =>
                {
                    if (response == null)
                    {
                        throw new NullReferenceException("response is null");
                    }
                    // response.DeserializeBody disposes the response object's stream,
                    // rendering all of its properties unusable, including StatusCode.
                    HttpStatusCode responseStatusCode = response.StatusCode;
                    RunningSession runningSession;
                    if (responseStatusCode == HttpStatusCode.ServiceUnavailable)
                    {
                        runningSession = new RunningSession();
                        runningSession.ConcurrencyFull = true;
                    }
                    else
                    {
                        runningSession = response.DeserializeBody <RunningSession>(
                            true, serializer_, HttpStatusCode.OK, HttpStatusCode.Created);
                        if (runningSession.isNewSession_ == null)
                        {
                            runningSession.isNewSession_ = responseStatusCode == HttpStatusCode.Created;
                        }
                        runningSession.ConcurrencyFull = false;
                    }
                    taskListener.OnComplete(runningSession);
                }, ex => taskListener.OnFail(ex))
                    , "api/sessions/running", body);
            }
            catch (Exception ex)
            {
                throw new EyesException($"StartSession failed: {ex.Message}", ex);
            }
        }
コード例 #9
0
 /// <summary>
 /// Starts a new session.
 /// </summary>
 public void StartSession(TaskListener <RunningSession> taskListener, SessionStartInfo sessionStartInfo)
 {
     StartSessionInternal(taskListener, sessionStartInfo);
 }