Exemplo n.º 1
0
        public string Invoke(HttpMethod httpMethod, string requestUriSuffix, Dictionary <string, string> headers, string body)
        {
            Contract.Requires(!string.IsNullOrWhiteSpace(requestUriSuffix));
            Contract.Requires(null == headers || (null != headers && !headers.ContainsKey(Constants.HttpHeaders.AUTHORIZATION)));
            Contract.Requires(null != UserInformation, Constants.Messages.CLIENT_NOT_LOGGED_IN);

            if (null == headers)
            {
                headers = new Dictionary <string, string>();
            }

            headers.Add(Constants.HttpHeaders.AUTHORIZATION, UserInformation.SecurityToken);

            var restCallExecutor = new RestCallExecutor();
            var requestUri       = new Uri(BaseUri, requestUriSuffix);

            string result;

            try
            {
                result = restCallExecutor.Invoke(httpMethod, requestUri.AbsoluteUri, headers, body ?? "");
            }
            catch (System.Net.Http.HttpRequestException ex)
            {
                var sessionResponse = GetToken(UserInformation.Username, UserInformation.Password, UserInformation.SerialNumber);
                Contract.Assert(null != sessionResponse);
                result = restCallExecutor.Invoke(httpMethod, requestUri.AbsoluteUri, headers, body ?? "");
            }

            Contract.Assert(!string.IsNullOrWhiteSpace(result));

            return(result);
        }
Exemplo n.º 2
0
        public String LoadEntity(Uri entityUri)
        {
            Debug.WriteLine("Loading entity with Uri: '{0}'", entityUri);
            CheckEntityUri(entityUri);

            try
            {
                return(_restCallExecutor.Invoke(entityUri.ToString(), _headers));
            }
            catch (HttpRequestException e)
            {
                Debug.WriteLine("Error occurred while fetching entity from '{0}': {1}", entityUri.ToString(), e.Message);
                throw;
            }
        }
        public void InvokeWithInvalidUriThrowsUriFormatException2()
        {
            // Arrange
            var invalidUri = "abc";
            RestCallExecutor restCallExecutor = new RestCallExecutor();

            // Act
            restCallExecutor.Invoke(invalidUri, null);

            // Assert
        }
        public void InvokeWithWhitespaceUriThrowsContractException3()
        {
            // Arrange
            var whitespaceUri = " ";
            RestCallExecutor restCallExecutor = new RestCallExecutor();

            // Act
            restCallExecutor.Invoke(HttpMethod.Head, whitespaceUri, null, null);

            // Assert
        }
        public void InvokeWithNullUriThrowsContractException3()
        {
            // Arrange
            string           nullUri          = null;
            RestCallExecutor restCallExecutor = new RestCallExecutor();

            // Act
            restCallExecutor.Invoke(HttpMethod.Head, nullUri, null, null);

            // Assert
        }
        public void InvokeWithNullUriThrowsContractException()
        {
            // Arrange
            string           nullUri          = null;
            RestCallExecutor restCallExecutor = new RestCallExecutor();

            // Act
            restCallExecutor.Invoke(nullUri);

            // Assert
        }
        public void InvokeWithWhitespaceUriThrowsContractException1()
        {
            // Arrange
            var whitespaceUri = " ";
            RestCallExecutor restCallExecutor = new RestCallExecutor();

            // Act
            restCallExecutor.Invoke(whitespaceUri);

            // Assert
        }
        public void InvokeWithWhitespaceUriThrowsArgumentException2()
        {
            // Arrange
            var whitespaceUri = " ";
            RestCallExecutor restCallExecutor = new RestCallExecutor();

            // Act
            restCallExecutor.Invoke(whitespaceUri, null);

            // Assert
        }
        public void InvokeWithNullUriThrowsArgumentException2()
        {
            // Arrange
            string           nullUri          = null;
            RestCallExecutor restCallExecutor = new RestCallExecutor();

            // Act
            restCallExecutor.Invoke(nullUri, null);

            // Assert
        }
Exemplo n.º 10
0
        public void TurnLightGroupOnSucceeds()
        {
            // Arrange
            var group = new Group
            {
                GroupId = TestConstants.GROUP_ID,
                Name    = TestConstants.GROUP_NAME
            };

            Mock.Arrange(() => RestCallExecutor.Invoke(HttpMethod.Get, Arg.Matches <string>(s => s.Contains(Constants.ApiOperation.GROUP_SET)), Arg.IsAny <Dictionary <string, string> >(), ""))
            .IgnoreInstance()
            .Returns(_successOperationResponse.SerializeObject)
            .OccursOnce();

            // Act
            var result = Sut.TurnLightGroupOn(group);

            // Assert
            Mock.Assert(RestCallExecutor);
            Assert.IsNotNull(result);
            Assert.IsTrue(result);
        }
        public void InvokeSetsAuthorizationHeaderAccordingHeadersDictionaryWhenAuthSchemeIsNotSet()
        {
            // Arrange
            var mockedResponseMessage = Mock.Create <HttpResponseMessage>();
            var mockedRequestHeaders  = Mock.Create <HttpRequestHeaders>();

            Mock.Arrange(() => HttpClient.DefaultRequestHeaders)
            .IgnoreInstance()
            .Returns(mockedRequestHeaders)
            .Occurs(4);

            Mock.ArrangeSet(() => mockedRequestHeaders.Authorization = new AuthenticationHeaderValue(BEARER_AUTH_SCHEME, SAMPLE_BEARER_TOKEN))
            .OccursNever();

            Mock.Arrange(() => mockedRequestHeaders.TryAddWithoutValidation(AUTHORIZATION_HEADER_KEY, SAMPLE_BEARER_TOKEN))
            .OccursOnce();

            Mock.Arrange(() => mockedRequestHeaders.Add(USER_AGENT_KEY, TEST_USER_AGENT))
            .OccursOnce();

            Mock.Arrange(() => mockedRequestHeaders.TryAddWithoutValidation(ACCEPT_HEADER_KEY, ACCEPT_HEADER_VALUE))
            .OccursOnce();

            Mock.Arrange(() => HttpClient.GetAsync(Arg.Is(new Uri(URI))).Result)
            .IgnoreInstance()
            .Returns(mockedResponseMessage)
            .OccursOnce();

            Mock.Arrange(() => mockedResponseMessage.EnsureSuccessStatusCode())
            .OccursOnce();

            Mock.Arrange(() => mockedResponseMessage.Content.ReadAsStringAsync().Result)
            .Returns(SAMPLE_RESPONSE_BODY)
            .OccursOnce();

            RestCallExecutor restCallExecutor = new RestCallExecutor();
            var headers = CreateSampleHeaders();

            headers.Add(AUTHORIZATION_HEADER_KEY, SAMPLE_BEARER_TOKEN);

            // Act
            var result = restCallExecutor.Invoke(HttpMethod.Get, URI, headers, null);

            // Assert
            Assert.AreEqual(SAMPLE_RESPONSE_BODY, result);

            Mock.Assert(HttpClient);
            Mock.Assert(mockedRequestHeaders);
            Mock.AssertSet(() => mockedRequestHeaders.Authorization = Arg.Is(new AuthenticationHeaderValue(BEARER_AUTH_SCHEME, SAMPLE_BEARER_TOKEN)));
            Mock.Assert(mockedResponseMessage);
        }
        public void GetGroupByIdSucceeds()
        {
            // Arrange
            var groupId       = 1L;
            var responseGroup = new Group
            {
                GroupId = groupId,
                Name    = "group1"
            };

            Mock.Arrange(() => RestCallExecutor.Invoke(HttpMethod.Get, Arg.AnyString, Arg.IsAny <Dictionary <string, string> >(), ""))
            .IgnoreInstance()
            .Returns(responseGroup.SerializeObject)
            .OccursOnce();

            // Act
            var result = Sut.GetGroup(1);

            // Assert
            Mock.Assert(RestCallExecutor);
            Assert.IsNotNull(result);
            Assert.AreEqual(responseGroup.GroupId, result.GroupId);
        }
        public void InvokeSetsLastReponseHeadersAccordingHeadersFromResponse()
        {
            // Arrange
            var mockedResponseMessage = Mock.Create <HttpResponseMessage>();
            var mockedRequestHeaders  = Mock.Create <HttpRequestHeaders>();

            var mockedResponseHeaders = Mock.Create <HttpResponseHeaders>();

            Mock.Arrange(() => HttpClient.DefaultRequestHeaders)
            .IgnoreInstance()
            .Returns(mockedRequestHeaders)
            .Occurs(3);

            Mock.Arrange(() => mockedRequestHeaders.Add(USER_AGENT_KEY, TEST_USER_AGENT))
            .OccursOnce();

            Mock.Arrange(() => mockedRequestHeaders.TryAddWithoutValidation(ACCEPT_HEADER_KEY, ACCEPT_HEADER_VALUE))
            .OccursOnce();

            Mock.Arrange(() => HttpClient.GetAsync(Arg.Is(new Uri(URI))).Result)
            .IgnoreInstance()
            .Returns(mockedResponseMessage)
            .OccursOnce();

            Mock.Arrange(() => mockedResponseMessage.EnsureSuccessStatusCode())
            .OccursOnce();

            Mock.Arrange(() => mockedResponseMessage.Headers)
            .Returns(mockedResponseHeaders)
            .OccursOnce();

            Mock.Arrange(() => mockedResponseMessage.Content.ReadAsStringAsync().Result)
            .Returns(SAMPLE_RESPONSE_BODY)
            .OccursOnce();

            RestCallExecutor restCallExecutor = new RestCallExecutor();

            // Act
            var result = restCallExecutor.Invoke(HttpMethod.Get, URI, CreateSampleHeaders(), null);

            // Assert
            Assert.AreEqual(SAMPLE_RESPONSE_BODY, result);
            Assert.AreEqual(mockedResponseHeaders, restCallExecutor.GetResponseHeaders());

            Mock.Assert(HttpClient);
            Mock.Assert(mockedRequestHeaders);
            Mock.Assert(mockedResponseMessage);
        }
        public void InvokePostOverwritesDefaultContentTypeHeaderIfCustomContentTypeHeaderProvided()
        {
            // Arrange
            var mockedResponseMessage = Mock.Create <HttpResponseMessage>();
            var mockedRequestHeaders  = Mock.Create <HttpRequestHeaders>();

            Mock.Arrange(() => HttpClient.DefaultRequestHeaders)
            .IgnoreInstance()
            .Returns(mockedRequestHeaders)
            .Occurs(4);

            Mock.Arrange(() => mockedRequestHeaders.Add(USER_AGENT_KEY, TEST_USER_AGENT))
            .OccursOnce();

            Mock.Arrange(() => mockedRequestHeaders.TryAddWithoutValidation(ACCEPT_HEADER_KEY, ACCEPT_HEADER_VALUE))
            .OccursOnce();

            var content = new StringContent(SAMPLE_REQUEST_BODY);

            Mock.Arrange(() => HttpClient.PostAsync(Arg.Is(new Uri(URI)), Arg.Is(content)).Result)
            .IgnoreInstance()
            .Returns(mockedResponseMessage)
            .OccursOnce();

            Mock.Arrange(() => mockedResponseMessage.EnsureSuccessStatusCode())
            .OccursOnce();

            Mock.Arrange(() => mockedResponseMessage.Content.ReadAsStringAsync().Result)
            .Returns(SAMPLE_RESPONSE_BODY)
            .OccursOnce();

            RestCallExecutor restCallExecutor = new RestCallExecutor();
            var headers = CreateSampleHeaders();

            headers.Add(CONTENT_TYPE_KEY, CONTENT_TYPE_VALUE);

            // Act
            var result = restCallExecutor.Invoke(HttpMethod.Post, URI, headers, SAMPLE_RESPONSE_BODY);

            // Assert
            Assert.AreEqual(SAMPLE_RESPONSE_BODY, result);

            Mock.Assert(HttpClient);
            Mock.Assert(mockedRequestHeaders);
            Mock.Assert(mockedResponseMessage);
        }
        public void InvokePutExecutesPutRequestOnUriWithProvidedHeadersAndBodyEnsuresSuccessStatusCodeAndReturnsResponseContent()
        {
            // Arrange
            var mockedResponseMessage = Mock.Create <HttpResponseMessage>();
            var mockedRequestHeaders  = Mock.Create <HttpRequestHeaders>();

            Mock.Arrange(() => HttpClient.DefaultRequestHeaders)
            .IgnoreInstance()
            .Returns(mockedRequestHeaders)
            .Occurs(3);

            Mock.Arrange(() => mockedRequestHeaders.Add(USER_AGENT_KEY, TEST_USER_AGENT))
            .OccursOnce();

            Mock.Arrange(() => mockedRequestHeaders.TryAddWithoutValidation(ACCEPT_HEADER_KEY, ACCEPT_HEADER_VALUE))
            .OccursOnce();

            HttpContent content = new StringContent(SAMPLE_REQUEST_BODY);

            Mock.Arrange(() => HttpClient.PutAsync(Arg.Is(new Uri(URI)), Arg.Is(content)).Result)
            .IgnoreInstance()
            .Returns(mockedResponseMessage)
            .OccursOnce();

            Mock.Arrange(() => mockedResponseMessage.EnsureSuccessStatusCode())
            .OccursOnce();

            Mock.Arrange(() => mockedResponseMessage.Content.ReadAsStringAsync().Result)
            .Returns(SAMPLE_RESPONSE_BODY)
            .OccursOnce();

            RestCallExecutor restCallExecutor = new RestCallExecutor();

            // Act
            var result = restCallExecutor.Invoke(HttpMethod.Put, URI, CreateSampleHeaders(), SAMPLE_REQUEST_BODY);

            // Assert
            Assert.AreEqual(SAMPLE_RESPONSE_BODY, result);
            Assert.AreEqual(ContentType.ApplicationJson, restCallExecutor.ContentType);

            Mock.Assert(HttpClient);
            Mock.Assert(mockedRequestHeaders);
            Mock.Assert(mockedResponseMessage);
        }
        public void InvokeGetExecutesGetRequestOnUriWithProvidedHeadersNotEnsuringSuccessStatusCodeReturnsResponseContent()
        {
            // Arrange
            var mockedResponseMessage = Mock.Create <HttpResponseMessage>();
            var mockedRequestHeaders  = Mock.Create <HttpRequestHeaders>();

            Mock.Arrange(() => HttpClient.DefaultRequestHeaders)
            .IgnoreInstance()
            .Returns(mockedRequestHeaders)
            .Occurs(3);

            Mock.Arrange(() => mockedRequestHeaders.Add(USER_AGENT_KEY, TEST_USER_AGENT))
            .OccursOnce();

            Mock.Arrange(() => mockedRequestHeaders.TryAddWithoutValidation(ACCEPT_HEADER_KEY, ACCEPT_HEADER_VALUE))
            .OccursOnce();

            Mock.Arrange(() => HttpClient.GetAsync(Arg.Is(new Uri(URI))).Result)
            .IgnoreInstance()
            .Returns(mockedResponseMessage)
            .OccursOnce();

            Mock.Arrange(() => mockedResponseMessage.Content.ReadAsStringAsync().Result)
            .Returns(SAMPLE_RESPONSE_BODY)
            .OccursOnce();

            RestCallExecutor restCallExecutor = new RestCallExecutor(false);

            // Act
            var result = restCallExecutor.Invoke(URI, CreateSampleHeaders());

            Assert.AreEqual(SAMPLE_RESPONSE_BODY, result);

            // Assert
            Mock.Assert(HttpClient);
            Mock.Assert(mockedRequestHeaders);
            Mock.Assert(mockedResponseMessage);
        }
Exemplo n.º 17
0
        public string GetToken(Uri baseUri, string username, string password, string serialNumber)
        {
            Contract.Requires(null != baseUri);
            Contract.Requires(baseUri.IsAbsoluteUri);
            Contract.Requires(!string.IsNullOrWhiteSpace(username));
            Contract.Requires(!string.IsNullOrWhiteSpace(password));
            Contract.Requires(!string.IsNullOrWhiteSpace(serialNumber));
            Contract.Ensures(!string.IsNullOrWhiteSpace(Contract.Result <string>()));

            this.BaseUri = baseUri;

            var sut = new SessionRequest
            {
                Username     = username,
                Password     = password,
                SerialNumber = serialNumber
            };

            var body       = sut.SerializeObject();
            var client     = new RestCallExecutor();
            var requestUri = new Uri(baseUri, Constants.ApiOperation.SESSION);
            var result     = client.Invoke(HttpMethod.Post, requestUri.AbsoluteUri, null, body);

            Contract.Assert(!string.IsNullOrWhiteSpace(result));

            var response = BaseDto.DeserializeObject <SessionResponse>(result);

            UserInformation = new UserInformation()
            {
                UserId        = response.UserId,
                Username      = username,
                Password      = password,
                SerialNumber  = serialNumber,
                SecurityToken = response.SecurityToken
            };

            return(response.SecurityToken);
        }
Exemplo n.º 18
0
        public void ExecuteCallout(String definitionParameters, CalloutData data)
        {
            var requestUrl = ExtractUrlFromDefinition(definitionParameters);
            var headers    = ExtractAuthorizationHeadersFromDefinition(definitionParameters);

            if (null == data)
            {
                Debug.WriteLine("CalloutData is null");
                throw new ArgumentNullException("data", "CalloutData must not be null");
            }

            Debug.WriteLine("Executing callout to '{0}'", requestUrl.ToString());

            try
            {
                _restCallExecutor.Invoke(HttpMethod.Post, requestUrl.ToString(), headers, JsonConvert.SerializeObject(data));
            }
            catch (HttpRequestException e)
            {
                Debug.WriteLine("Error occurred while executing callout: {0}", e.Message);
                throw;
            }
        }
        public void InvokeSetsDefaultUserAgentHeaderIfNoCustomUserAgentHeaderProvided()
        {
            // Arrange
            var mockedResponseMessage = Mock.Create <HttpResponseMessage>();
            var mockedRequestHeaders  = Mock.Create <HttpRequestHeaders>();

            Mock.Arrange(() => HttpClient.DefaultRequestHeaders)
            .IgnoreInstance()
            .Returns(mockedRequestHeaders)
            .Occurs(2);

            Mock.Arrange(() => mockedRequestHeaders.Add(USER_AGENT_KEY, "RestCallExecutor"))
            .OccursOnce();

            Mock.Arrange(() => HttpClient.GetAsync(Arg.Is(new Uri(URI))).Result)
            .IgnoreInstance()
            .Returns(mockedResponseMessage)
            .OccursOnce();

            Mock.Arrange(() => mockedResponseMessage.EnsureSuccessStatusCode())
            .OccursOnce();

            Mock.Arrange(() => mockedResponseMessage.Content.ReadAsStringAsync().Result)
            .Returns(SAMPLE_RESPONSE_BODY)
            .OccursOnce();

            RestCallExecutor restCallExecutor = new RestCallExecutor();
            var result = restCallExecutor.Invoke(URI);

            // Act
            Assert.AreEqual(SAMPLE_RESPONSE_BODY, result);

            // Assert
            Mock.Assert(HttpClient);
            Mock.Assert(mockedRequestHeaders);
            Mock.Assert(mockedResponseMessage);
        }
Exemplo n.º 20
0
        public void TurnDeviceOnSucceeds()
        {
            // Arrange
            var device = new Device
            {
                DeviceId = TestConstants.DEVICE_ID,
            };

            Mock.Arrange(() => RestCallExecutor.Invoke(HttpMethod.Get, Arg.Matches <string>(s => s.Contains(Constants.ApiOperation.DEVICE_SET)), Arg.IsAny <Dictionary <string, string> >(), ""))
            .IgnoreInstance()
            .Returns(_successOperationResponse.SerializeObject)
            .OccursOnce();

            // Act
            var result = Sut.TurnDeviceOn(device);

            // Assert
            Assert.IsNotNull(result);
            Assert.IsTrue(result);

            Mock.Assert(RestCallExecutor);
        }
        public void InvokeExecutesThrowsHttpRequestExceptionIfEnsureSuccessStatusCodeFails()
        {
            // Arrange
            var mockedResponseMessage = Mock.Create <HttpResponseMessage>();
            var mockedRequestHeaders  = Mock.Create <HttpRequestHeaders>();

            Mock.Arrange(() => HttpClient.DefaultRequestHeaders)
            .IgnoreInstance()
            .Returns(mockedRequestHeaders)
            .Occurs(3);

            Mock.Arrange(() => mockedRequestHeaders.Add(USER_AGENT_KEY, TEST_USER_AGENT))
            .OccursOnce();

            Mock.Arrange(() => mockedRequestHeaders.TryAddWithoutValidation(ACCEPT_HEADER_KEY, ACCEPT_HEADER_VALUE))
            .OccursOnce();

            Mock.Arrange(() => HttpClient.GetAsync(Arg.Is(new Uri(URI))).Result)
            .IgnoreInstance()
            .Returns(mockedResponseMessage)
            .OccursOnce();

            Mock.Arrange(() => mockedResponseMessage.EnsureSuccessStatusCode())
            .Throws <HttpRequestException>()
            .OccursOnce();

            RestCallExecutor restCallExecutor = new RestCallExecutor();

            // Act
            restCallExecutor.Invoke(URI, CreateSampleHeaders());

            // Assert
            Mock.Assert(HttpClient);
            Mock.Assert(mockedRequestHeaders);
            Mock.Assert(mockedResponseMessage);
        }