Esempio n. 1
0
        public async Task AddAttachmentWithNonAsciiFilenameTest()
        {
            var nonAsciiFileNames = new List<string> { "Просто", "مرحبا", "你好嗎", "Naïve" };
            var responseList = new List<FakeHttpServerResponse>();
            for (var i = 0; i < nonAsciiFileNames.Count; i++)
            {
                responseList.Add(new FakeHttpServerResponse(201, ResponseMeta));
            }

            var server = new FakeHttpServer(Port, responseList);
            server.Start();
            var config = new StorageConfig(endPoint: "http://localhost:" + Port, apiKey: "apiKey",
                environmentId: "envId");
            using var storage = Storage.NewStorage(config);

            foreach (var fileName in nonAsciiFileNames.Select(fileNamePart => fileNamePart + " file.txt"))
            {
                await using var streamWriter = File.CreateText(fileName);
                streamWriter.AutoFlush = true;
                await streamWriter.WriteAsync(Guid.NewGuid().ToString()).ConfigureAwait(false);
                await using var stream = File.OpenRead(fileName);

                var meta = await storage.AddAttachmentAsync(Country, RecordKey, stream)
                    .ConfigureAwait(false);
                Assert.IsNotNull(meta);
                Assert.IsTrue(server.LastRequestBody.Contains($"filename=\"{fileName}\"",
                    StringComparison.InvariantCulture));
                File.Delete(fileName);
            }

            server.Stop();
        }
Esempio n. 2
0
        public void DeleteAttachmentNegativeTest()
        {
            var config = new StorageConfig(endPoint: "http://localhost:" + Port, apiKey: "apiKey",
                environmentId: "envId");
            using var storage = Storage.NewStorage(config);

            var exception = Assert.ThrowsAsync<StorageClientException>(() =>
                storage.DeleteAttachmentAsync(Country, null, FileId));
            Assert.AreEqual("Record key is null", exception.Message);

            exception = Assert.ThrowsAsync<StorageClientException>(() =>
                storage.DeleteAttachmentAsync(null, RecordKey, FileId));
            Assert.AreEqual("Country code is null", exception.Message);

            exception = Assert.ThrowsAsync<StorageClientException>(() =>
                storage.DeleteAttachmentAsync(Country, RecordKey, null));
            Assert.AreEqual("File ID is null", exception.Message);

            var server = new FakeHttpServer(Port, new[] { new FakeHttpServerResponse(405, "Error") });
            server.Start();
            var serverException = Assert.ThrowsAsync<StorageServerException>(() =>
                storage.DeleteAttachmentAsync(Country, RecordKey, FileId));
            Assert.IsTrue(serverException.Message.Contains(
                "Unexpected response: StatusCode: 405, ReasonPhrase: 'Method Not Allowed'",
                StringComparison.InvariantCulture));
            server.Stop();
        }
Esempio n. 3
0
        public void ShouldRespondWithStringBasedOnConfiguration()
        {
            using (FakeHttpServer server = new FakeHttpServer())
            {
                server.Host = "localhost";
                server.Port = 8080;
                server.Path = "api/v1/accounts";

                server.ReturnString("Hello, World!!!");
                server.StatusCode        = HttpStatusCode.OK;
                server.StatusDescription = "Okey, Dokey";
                server.Headers.Add("When", new DateTime(2014, 06, 16).ToString("MM/dd/yyyy"));

                StringBodyExtractor extractor = new StringBodyExtractor();
                server.UseBodyExtractor(extractor);

                server.Listen();

                WebRequest request = WebRequest.Create("http://localhost:8080/api/v1/accounts");
                request.Method = "POST";
                using (StreamWriter writer = new StreamWriter(request.GetRequestStream()))
                {
                    writer.Write("Hello, Universe!!!");
                }
                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                {
                    Assert.AreEqual(server.StatusCode, response.StatusCode, "The wrong status code was returned.");
                    Assert.AreEqual(server.StatusDescription, response.StatusDescription, "The wrong status description was returned.");
                    Assert.AreEqual("06/16/2014", response.Headers["When"], "The wrong header was returned");
                    string responseText = new StreamReader(response.GetResponseStream()).ReadToEnd();
                    Assert.AreEqual("Hello, World!!!", responseText);
                    Assert.AreEqual("Hello, Universe!!!", extractor.Content);
                }
            }
        }
        public void ShouldRespondWithStringBasedOnConfiguration()
        {
            using (FakeHttpServer server = new FakeHttpServer())
            {
                server.Host = "localhost";
                server.Port = 8080;
                server.Path = "api/v1/accounts";

                server.ReturnString("Hello, World!!!");
                server.StatusCode = HttpStatusCode.OK;
                server.StatusDescription = "Okey, Dokey";
                server.Headers.Add("When", new DateTime(2014, 06, 16).ToString("MM/dd/yyyy"));

                server.Listen();

                WebRequest request = WebRequest.Create("http://localhost:8080/api/v1/accounts");
                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                {
                    Assert.AreEqual(server.StatusCode, response.StatusCode, "The wrong status code was returned.");
                    Assert.AreEqual(server.StatusDescription, response.StatusDescription, "The wrong status description was returned.");
                    Assert.AreEqual("06/16/2014", response.Headers["When"], "The wrong header was returned");
                    string responseText = getResponseString(response);
                    Assert.AreEqual("Hello, World!!!", responseText);
                }
            }
        }
Esempio n. 5
0
        public void ShouldPostMultuPartWithBase64Content()
        {
            using (FakeHttpServer server = new FakeHttpServer("http://localhost:8080/api/customers"))
            {
                MultiPartBodyExtractor extractor = new MultiPartBodyExtractor();
                server.UseBodyExtractor(extractor);

                server.Listen();

                string message              = "Hello, World!Ӽ!";
                byte[] messageRaw           = Encoding.UTF8.GetBytes(message);
                string base64               = Convert.ToBase64String(messageRaw);
                byte[] base64Raw            = Encoding.UTF8.GetBytes(base64);
                NameValueCollection headers = new NameValueCollection();
                headers.Add("Content-Transfer-Encoding", "base64");

                RestClient client = new RestClient("http://localhost:8080");
                client.Post("api/customers")
                .WithMultiPartBody(b =>
                {
                    b.WithFile("file", "file.txt", base64Raw, "text/plain", headers);
                })
                .Execute();

                var file = extractor.Files.GetFiles("file").Single();
                CollectionAssert.AreEqual(base64Raw, file.Contents);
            }
        }
Esempio n. 6
0
        public void ShouldExtractUrlEncodedData()
        {
            using (FakeHttpServer server = new FakeHttpServer())
            {
                server.Host              = "localhost";
                server.Port              = 8080;
                server.Path              = "api/v1/accounts";
                server.StatusCode        = HttpStatusCode.OK;
                server.StatusDescription = "Success";

                UrlEncodedBodyExtractor extractor = new UrlEncodedBodyExtractor();
                server.UseBodyExtractor(extractor);

                server.Listen();

                WebRequest request = WebRequest.Create("http://localhost:8080/api/v1/accounts");
                request.Method      = "POST";
                request.ContentType = "application/x-www-form-urlencoded";
                using (StreamWriter writer = new StreamWriter(request.GetRequestStream()))
                {
                    writer.Write("name=bob&age=31");
                }
                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                {
                    NameValueCollection collection = extractor.Parameters;
                    Assert.AreEqual("bob", collection.Get("name"), "Could not extract the name parameter.");
                    Assert.AreEqual("31", collection.Get("age"), "Could not extract the age parameter.");
                }
            }
        }
Esempio n. 7
0
        public void MigrateTestPositive()
        {
            var server = new FakeHttpServer(Port,
                                            new[] { new FakeHttpServerResponse(200, FindResponse),
                                                    new FakeHttpServerResponse(201, FindResponse),
                                                    new FakeHttpServerResponse(200, BadFindResponse) });

            server.Start();
            var config = new StorageConfig(endPoint: "http://*****:*****@ssworD!"));

            using var storage = Storage.NewStorage(config);
            const int limit         = 50;
            var       migrateResult = storage.MigrateAsync("country", limit).Result;

            Assert.NotNull(migrateResult);
            Assert.AreEqual(1, migrateResult.Migrated);
            Assert.AreEqual(0, migrateResult.TotalLeft);
            Assert.AreEqual(0, migrateResult.Errors.Count);

            migrateResult = storage.MigrateAsync("country", limit).Result;
            Assert.NotNull(migrateResult);
            Assert.AreEqual(0, migrateResult.Migrated);
            Assert.AreEqual(1, migrateResult.TotalLeft);
            Assert.AreEqual(1, migrateResult.Errors.Count);

            server.Stop();
        }
Esempio n. 8
0
        public void FindOneNothingFoundTest()
        {
            const string response = "{\n" +
                                    "  \"data\": [\n" +
                                    "  ],\n" +
                                    "  \"meta\": {\n" +
                                    "    \"count\": 0,\n" +
                                    "    \"limit\": 100,\n" +
                                    "    \"offset\": 0,\n" +
                                    "    \"total\": 0\n" +
                                    "  }\n" +
                                    "}";
            var server = new FakeHttpServer(Port, new[] { new FakeHttpServerResponse(200, response) });

            server.Start();
            var config = new StorageConfig(endPoint: "http://localhost:" + Port, apiKey: "apiKey",
                                           environmentId: "envId");

            using var storage = Storage.NewStorage(config);
            var filter = new FindFilter()
                         .KeyEq(NumberField.Version, 0);
            var foundedRecord = storage.FindOneAsync("country", filter).Result;

            Assert.Null(foundedRecord);
            server.Stop();
        }
Esempio n. 9
0
        public void ReadTestPositive()
        {
            const string recordKey1    = "123";
            const string recordKey2    = "456";
            const string body1         = "body1";
            const string body2         = "body2";
            const string readResponse1 = "{\n" +
                                         "  \"is_encrypted\": false,\n" +
                                         "  \"record_key\": \"3E758B0DC7D6A52F2A314FA996BF5513BE8BC5D276935CE2628C67151ABC6DA3\",\n" +
                                         "  \"body\": \"pt:ewogICJtZXRhIjogewogICAgImlzX2VuY3J5cHRlZCI6IGZhbHNlLAogICAgInJlY29yZF9rZXkiOiAiMTIzIgogIH0sCiAgInBheWxvYWQiOiAiYm9keTEiCn0=\"\n" +
                                         "}";
            const string readResponse2 = "{\n" +
                                         "  \"is_encrypted\": false,\n" +
                                         "  \"record_key\": \"21006B2178B6D5D43CB19FAB2468A679653CDC9EA0280A905F5DCFEBCC0D8CFF\",\n" +
                                         "  \"body\": \"pt:ewogICJtZXRhIjogewogICAgImlzX2VuY3J5cHRlZCI6IGZhbHNlLAogICAgInJlY29yZF9rZXkiOiAiNDU2IgogIH0sCiAgInBheWxvYWQiOiAiYm9keTIiCn0=\"\n" +
                                         "}";

            var server = new FakeHttpServer(Port,
                                            new[] { new FakeHttpServerResponse(200, readResponse1), new FakeHttpServerResponse(200, readResponse2) });

            server.Start();
            var config = new StorageConfig(endPoint: "http://localhost:" + Port, apiKey: "apiKey",
                                           environmentId: "envId");

            using var storage = Storage.NewStorage(config);
            var record = storage.ReadAsync("country", "anyRecordKeyForMock").Result;

            Assert.AreEqual(recordKey1, record.RecordKey);
            Assert.AreEqual(body1, record.Body);
            record = storage.ReadAsync("country", "anyRecordKeyForMock").Result;
            Assert.AreEqual(recordKey2, record.RecordKey);
            Assert.AreEqual(body2, record.Body);
            server.Stop();
        }
Esempio n. 10
0
        public async Task ShouldPOSTMultiPartDataAsync()
        {
            using (FakeHttpServer server = new FakeHttpServer("http://localhost:8080/api/customers"))
            {
                MultiPartBodyExtractor extractor = new MultiPartBodyExtractor();
                server.UseBodyExtractor(extractor);

                server.Listen();

                RestClient client = new RestClient("http://localhost:8080");
                await client.Post("api/customers")
                .WithMultiPartBody(b =>
                {
                    b.WithFormData(ub => ub.WithParameter("name", "John Smith"));
                    b.WithFile("file1", "path", Encoding.UTF8.GetBytes("Hello, world"), "text/plain");
                })
                .ExecuteAsync();

                Assert.AreEqual("John Smith", extractor.Parameters["name"], "The form data was not transfered.");

                var file = extractor.Files.GetFiles("file1").SingleOrDefault();
                Assert.AreEqual("file1", file.Name);
                Assert.AreEqual("path", file.FileName);
                Assert.AreEqual("text/plain", file.ContentType);
                Assert.AreEqual("Hello, world", Encoding.UTF8.GetString(file.Contents));
            }
        }
Esempio n. 11
0
        public void GenerateAudienceForTokenClientTest(string endpoint, string endpointMask,
                                                       FakeHttpServerResponse serverResponse, string midPopAudience, string miniPopAudience)
        {
            const string   midPopCountryCode  = "us";
            const string   miniPopCountryCode = "pu";
            const string   recordKey          = "someRecordKey";
            FakeHttpServer server             = null;

            if (!string.IsNullOrEmpty(serverResponse?.Body))
            {
                server = new FakeHttpServer(Port, new[] { serverResponse });
                server.Start();
            }

            using var httpClient = new HttpClient { Timeout = new TimeSpan(0, 0, 30) };
            var tokenClient = new FakeTokenClient();

            using var dao = HttpDao.NewDao(EnvId, tokenClient, httpClient, endpoint, endpointMask, s_endpoint);
            //midpop
            Assert.ThrowsAsync <StorageServerException>(async() =>
                                                        await dao.ReadRecordAsync(midPopCountryCode, recordKey).ConfigureAwait(false));
            Assert.AreEqual(midPopAudience, tokenClient.Audience);
            //minipop
            Assert.ThrowsAsync <StorageServerException>(async() =>
                                                        await dao.ReadRecordAsync(miniPopCountryCode, recordKey).ConfigureAwait(false));
            Assert.AreEqual(miniPopAudience, tokenClient.Audience);
            server?.Stop();
        }
        public void ShouldExtractUrlEncodedData()
        {
            using (FakeHttpServer server = new FakeHttpServer())
            {
                server.Host = "localhost";
                server.Port = 8080;
                server.Path = "api/v1/accounts";
                server.StatusCode = HttpStatusCode.OK;
                server.StatusDescription = "Success";

                UrlEncodedBodyExtractor extractor = new UrlEncodedBodyExtractor();
                server.UseBodyExtractor(extractor);

                server.Listen();

                WebRequest request = WebRequest.Create("http://localhost:8080/api/v1/accounts");
                request.Method = "POST";
                request.ContentType = "application/x-www-form-urlencoded";
                using (StreamWriter writer = new StreamWriter(request.GetRequestStream()))
                {
                    writer.Write("name=bob&age=31");
                }
                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                {
                    NameValueCollection collection = extractor.Parameters;
                    Assert.AreEqual("bob", collection.Get("name"), "Could not extract the name parameter.");
                    Assert.AreEqual("31", collection.Get("age"), "Could not extract the age parameter.");
                }
            }
        }
Esempio n. 13
0
        public void ShouldPOSTWithFormDataObject()
        {
            using (FakeHttpServer server = new FakeHttpServer("http://localhost:8080/api/customers"))
            {
                var bodyExtractor = new UrlEncodedBodyExtractor();
                var extractor     = new RequestExtractor(bodyExtractor);
                server.UseBodyExtractor(extractor);
                server.Listen();

                RestClient client   = new RestClient();
                var        response = client.Post("http://localhost:8080/api/customers")
                                      .WithUrlEncodedBody(new
                {
                    Name  = "Bob Smith",
                    Age   = 31,
                    Title = "Mr."
                })
                                      .Execute();

                string name  = bodyExtractor.Parameters["Name"];
                string age   = bodyExtractor.Parameters["Age"];
                string title = bodyExtractor.Parameters["Title"];

                Assert.AreEqual("Bob Smith", name, "The name was not sent.");
                Assert.AreEqual("31", age, "The age was not sent.");
                Assert.AreEqual("Mr.", title, "The title was not sent.");
            }
        }
Esempio n. 14
0
        static void Main(string[] args)
        {
            FakeHttpServer fakeHttpServer = new FakeHttpServer();
            fakeHttpServer.Start();

            Console.ReadLine();

            fakeHttpServer.Stop();
        }
Esempio n. 15
0
        public void DefaultParametersTest()
        {
            var server = new FakeHttpServer(Port, new[] { new FakeHttpServerResponse(200, CountryLoadResponse) });

            server.Start();
            using var httpClient = new HttpClient();
            using var dao        = HttpDao.NewDao("envId", new ApiKeyTokenClient("apiKey"), httpClient, null, "test.localhost",
                                                  s_endpoint);
            var popList = dao.GetPopDictionaryClone();

            Assert.AreEqual(2, popList.Count);
            server.Stop();
        }
Esempio n. 16
0
        public async Task AddAttachmentTest()
        {
            var server = new FakeHttpServer(Port,
                new[]
                {
                    new FakeHttpServerResponse(201, ResponseMeta), new FakeHttpServerResponse(201, ResponseMeta),
                    new FakeHttpServerResponse(201, ResponseMeta), new FakeHttpServerResponse(201, ResponseMeta),
                    new FakeHttpServerResponse(201, ResponseMeta)
                });
            server.Start();
            var config = new StorageConfig(endPoint: "http://localhost:" + Port, apiKey: "apiKey",
                environmentId: "envId");
            using var storage = Storage.NewStorage(config);
            await using var writer = GenerateMemoryStream(Guid.NewGuid().ToString());

            var meta = await storage.AddAttachmentAsync(Country, RecordKey, writer.BaseStream, FileName, MimeType)
                .ConfigureAwait(false);
            Assert.IsNotNull(meta);
            Assert.AreEqual("POST", server.LastRequestMethod);

            await using var writer2 = GenerateMemoryStream(Guid.NewGuid().ToString());
            meta = await storage.AddAttachmentAsync(Country, RecordKey, writer2.BaseStream, FileName, MimeType, true)
                .ConfigureAwait(false);
            Assert.IsNotNull(meta);
            Assert.AreEqual("PUT", server.LastRequestMethod);

            await using var writer3 = GenerateMemoryStream(Guid.NewGuid().ToString());
            meta = await storage.AddAttachmentAsync(Country, RecordKey, writer3.BaseStream, FileName)
                .ConfigureAwait(false);
            Assert.IsNotNull(meta);

            await using var writer4 = GenerateMemoryStream(Guid.NewGuid().ToString());
            meta = await storage.AddAttachmentAsync(Country, RecordKey, writer4.BaseStream)
                .ConfigureAwait(false);
            Assert.IsNotNull(meta);
            Assert.IsTrue(server.LastRequestBody.Contains("filename=\"file\"", StringComparison.InvariantCulture));

            await using var streamWriter = File.CreateText(FileName);
            streamWriter.AutoFlush = true;
            await streamWriter.WriteAsync(Guid.NewGuid().ToString()).ConfigureAwait(false);
            await using var stream = File.OpenRead(FileName);

            meta = await storage.AddAttachmentAsync(Country, RecordKey, stream)
                .ConfigureAwait(false);
            Assert.IsNotNull(meta);
            Assert.IsTrue(server.LastRequestBody.Contains("filename=\"file.txt\"", StringComparison.InvariantCulture));
            File.Delete(FileName);
            server.Stop();
        }
Esempio n. 17
0
        public void WriteTestPositive()
        {
            var server = new FakeHttpServer(Port, new[] { new FakeHttpServerResponse(201, "Created") });

            server.Start();
            var config = new StorageConfig(endPoint: "http://localhost:" + Port, apiKey: "apiKey",
                                           environmentId: "envId");

            using var storage = Storage.NewStorage(config);
            const string recordKey = "123";
            var          record    = storage.WriteAsync("country", new Record(recordKey)).Result;

            Assert.AreEqual(recordKey, record.RecordKey);
            server.Stop();
        }
Esempio n. 18
0
        public void DeleteTestPositive()
        {
            var server = new FakeHttpServer(Port, new[] { new FakeHttpServerResponse(200, "OK") });

            server.Start();
            var config = new StorageConfig(endPoint: "http://localhost:" + Port, apiKey: "apiKey",
                                           environmentId: "envId");

            using var storage = Storage.NewStorage(config);
            const string recordKey = "123";
            var          result    = storage.DeleteAsync("country", recordKey).Result;

            Assert.True(result);
            server.Stop();
        }
Esempio n. 19
0
        public void ShouldGetInt32()
        {
            using (FakeHttpServer server = new FakeHttpServer("http://localhost:8080/numbers"))
            {
                server.ReturnString("4");
                server.Listen();

                RestClient client   = new RestClient("http://localhost:8080");
                var        response = client.Get("numbers")
                                      .WhenSuccess(r => r.FromString <int>())
                                      .Execute();
                Assert.IsTrue(response.IsSuccessStatusCode, "An error occurred getting the number.");
                Assert.AreEqual(4, response.GetResult <int>());
            }
        }
Esempio n. 20
0
        public void GetTokenTest()
        {
            const int tokenExpiredLifetime = 1;

            const string expectedValue1 = "1111111111";
            var          tokenResponse1 = "{'access_token':'" + expectedValue1 +
                                          "' , 'expires_in':'" + tokenExpiredLifetime +
                                          "' , 'token_type':'bearer', 'scope':'" + EnvId + "'}";

            const string expectedValue2 = "2222222222";
            const string tokenResponse2 = "{'access_token':'" + expectedValue2 +
                                          "' , 'expires_in':'300' , 'token_type':'bearer', 'scope':'" + EnvId + "'}";

            const string expectedValue3 = "3333333333";
            const string tokenResponse3 = "{'access_token':'" + expectedValue3 +
                                          "' , 'expires_in':'300' , 'token_type':'bearer', 'scope':'" + EnvId + "'}";


            var server = new FakeHttpServer(Port,
                                            new[]
            {
                new FakeHttpServerResponse(200, tokenResponse1),
                new FakeHttpServerResponse(200, tokenResponse2),
                new FakeHttpServerResponse(200, tokenResponse3)
            });

            server.Start();

            using var httpClient = new HttpClient();
            var tokenClient =
                new OAuthTokenClient(s_defaultAuthEndpoint, null, EnvId, ClientId, ClientSecret, httpClient);
            //get the first token
            var token = tokenClient.RefreshTokenAsync(false, Audience, Apac).Result;

            Assert.AreEqual(expectedValue1, token);
            Thread.Sleep(tokenExpiredLifetime * 2 * 1_000);
            //get new token after expiration
            token = tokenClient.RefreshTokenAsync(false, Audience, Apac).Result;
            Assert.AreEqual(expectedValue2, token);
            //get cashed token
            token = tokenClient.RefreshTokenAsync(false, Audience, Apac).Result;
            Assert.AreEqual(expectedValue2, token);
            //force update token
            token = tokenClient.RefreshTokenAsync(true, Audience, Apac).Result;
            Assert.AreEqual(expectedValue3, token);

            server.Stop();
        }
Esempio n. 21
0
        public void ShouldGETWithQueryParametersObject()
        {
            using (FakeHttpServer server = new FakeHttpServer("http://localhost:8080/api/customers"))
            {
                var extractor = new RequestExtractor();
                server.UseBodyExtractor(extractor);
                server.Listen();

                RestClient client   = new RestClient();
                var        response = client.Get("http://localhost:8080/api/customers")
                                      .WithQueryParameters(new { customerid = 123 })
                                      .Execute();

                Assert.AreEqual("123", extractor.QueryString["customerid"], "The ID was not passed.");
            }
        }
Esempio n. 22
0
        public void ShouldGET()
        {
            using (FakeHttpServer server = new FakeHttpServer("http://localhost:8080/api/customers"))
            {
                server.StatusCode = HttpStatusCode.OK;

                server.Listen();

                RestClient client   = new RestClient();
                var        response = client.Get("http://localhost:8080/api/customers").Execute();

                Assert.AreEqual(HttpStatusCode.OK, response.StatusCode, "The wrong status code was returned.");
                Assert.IsTrue(response.IsSuccessStatusCode, "A success code was returned. There should be no error.");
                Assert.IsNull(response.Result, "No WHEN handler was defined. The result should be null.");
            }
        }
Esempio n. 23
0
        public void TokenResponseWrongStatusTest()
        {
            var server = new FakeHttpServer(Port, new[] { new FakeHttpServerResponse(401, "") });

            server.Start();
            using var httpClient = new HttpClient();
            var tokenClient =
                new OAuthTokenClient(s_defaultAuthEndpoint, null, EnvId, ClientId, ClientSecret, httpClient);
            var exception = Assert.ThrowsAsync <StorageServerException>(async() =>
            {
                var unused = await tokenClient.RefreshTokenAsync(false, Audience, Emea).ConfigureAwait(false);
            });

            Assert.AreEqual("Unexpected authorization response status='Unauthorized', content=''", exception.Message);
            server.Stop();
        }
Esempio n. 24
0
        public void ShouldGETWithQueryParametersObject()
        {
            using (FakeHttpServer server = new FakeHttpServer("http://localhost:8080/api/customers"))
            {
                var extractor = new RequestExtractor();
                server.UseBodyExtractor(extractor);
                server.Listen();

                RestClient client = new RestClient();
                var response = client.Get("http://localhost:8080/api/customers")
                    .WithQueryParameters(new { customerid = 123 })
                    .Execute();

                Assert.AreEqual("123", extractor.QueryString["customerid"], "The ID was not passed.");
            }
        }
Esempio n. 25
0
        public void ShouldGET()
        {
            using (FakeHttpServer server = new FakeHttpServer("http://localhost:8080/api/customers"))
            {
                server.StatusCode = HttpStatusCode.OK;

                server.Listen();
                
                RestClient client = new RestClient();
                var response = client.Get("http://localhost:8080/api/customers").Execute();

                Assert.AreEqual(HttpStatusCode.OK, response.StatusCode, "The wrong status code was returned.");
                Assert.IsTrue(response.IsSuccessStatusCode, "A success code was returned. There should be no error.");
                Assert.IsNull(response.Result, "No WHEN handler was defined. The result should be null.");
            }
        }
Esempio n. 26
0
        public async Task UpdateAttachmentMetaTest()
        {
            var server = new FakeHttpServer(Port,
                new[] { new FakeHttpServerResponse(200, ResponseMeta), new FakeHttpServerResponse(200, ResponseMeta) });
            server.Start();
            var config = new StorageConfig(endPoint: "http://localhost:" + Port, apiKey: "apiKey",
                environmentId: "envId");
            using var storage = Storage.NewStorage(config);
            var meta = await storage.UpdateAttachmentMetaAsync(Country, RecordKey, FileId, FileId)
                .ConfigureAwait(false);
            Assert.NotNull(meta);

            meta = await storage.UpdateAttachmentMetaAsync(Country, RecordKey, FileId, mimeType: MimeType)
                .ConfigureAwait(false);
            Assert.NotNull(meta);
            server.Stop();
        }
Esempio n. 27
0
        public void ShouldGETWithSimpleTemplate()
        {
            using (FakeHttpServer server = new FakeHttpServer("http://localhost:8080/api/customers"))
            {
                var extractor = new RequestExtractor();
                server.UseBodyExtractor(extractor);
                server.Listen();

                RestClient client = new RestClient();
                var response = client.Get("http://localhost:8080/api/customers/{customerId}", new 
                    {
                        customerId = 123
                    }).Execute();

                Assert.IsTrue(extractor.Url.ToString().EndsWith("123"), "The ID was not passed.");
            }
        }
Esempio n. 28
0
        public void ShouldGETWithCustomHeader()
        {
            using (FakeHttpServer server = new FakeHttpServer("http://localhost:8080/api/customers"))
            {
                var extractor = new RequestExtractor();
                server.UseBodyExtractor(extractor);
                server.Listen();

                RestClient client   = new RestClient();
                var        response = client.Get("http://localhost:8080/api/customers")
                                      .WithHeader("test_header", "test_value")
                                      .Execute();

                var value = extractor.Headers.Get("test_header");
                Assert.AreEqual("test_value", value, "The header was not passed to the server.");
            }
        }
Esempio n. 29
0
        public void ShouldGETWithSimpleTemplate()
        {
            using (FakeHttpServer server = new FakeHttpServer("http://localhost:8080/api/customers"))
            {
                var extractor = new RequestExtractor();
                server.UseBodyExtractor(extractor);
                server.Listen();

                RestClient client   = new RestClient();
                var        response = client.Get("http://localhost:8080/api/customers/{customerId}", new
                {
                    customerId = 123
                }).Execute();

                Assert.IsTrue(extractor.Url.ToString().EndsWith("123"), "The ID was not passed.");
            }
        }
Esempio n. 30
0
        public void ShouldPOSTWithNoBody()
        {
            using (FakeHttpServer server = new FakeHttpServer("http://localhost:8080/api/customers"))
            {
                RequestExtractor extractor = new RequestExtractor();
                server.UseBodyExtractor(extractor);
                server.Listen();

                RestClient client   = new RestClient();
                var        response = client.Post("http://localhost:8080/api/customers")
                                      .WhenError(r => { throw new Exception(r.FromString <string>()); })
                                      .Execute();

                string contentLength = extractor.Headers["Content-Length"];
                Assert.AreEqual("0", contentLength, "The content length was not specified.");
            }
        }
Esempio n. 31
0
        public async Task DeleteAttachmentTest()
        {
            var server = new FakeHttpServer(Port,
                new[] { new FakeHttpServerResponse(204, "Deleted"), new FakeHttpServerResponse(404, "Not found") });
            server.Start();
            var config = new StorageConfig(endPoint: "http://localhost:" + Port, apiKey: "apiKey",
                environmentId: "envId");
            using var storage = Storage.NewStorage(config);
            var status = await storage.DeleteAttachmentAsync(Country, RecordKey, FileId)
                .ConfigureAwait(false);
            Assert.IsTrue(status);

            status = await storage.DeleteAttachmentAsync(Country, RecordKey, FileId)
                .ConfigureAwait(false);
            Assert.IsFalse(status);
            server.Stop();
        }
        public void ShouldExtractMultiPartFormData()
        {
            using (FakeHttpServer server = new FakeHttpServer())
            {
                server.Host = "localhost";
                server.Port = 8080;
                server.Path = "api/v1/accounts";
                server.StatusCode = HttpStatusCode.OK;
                server.StatusDescription = "Success";

                MultiPartBodyExtractor extractor = new MultiPartBodyExtractor();
                server.UseBodyExtractor(extractor);

                server.Listen();

                WebRequest request = WebRequest.Create("http://localhost:8080/api/v1/accounts");
                request.Method = "POST";
                request.ContentType = "multipart/form-data; boundary=taco";
                using (StreamWriter writer = new StreamWriter(request.GetRequestStream()))
                {
                    writer.Write("--taco\r\n");
                    writer.Write("Content-Disposition: form-data; name=name\r\n");
                    writer.Write("\r\n");
                    writer.Write("bob\r\n");
                    writer.Write("--taco\r\n");
                    writer.Write("Content-Disposition: form-data; name=file; filename=help.txt\r\n");
                    writer.Write("Content-Type: text/plain\r\n");
                    writer.Write("\r\n");
                    writer.Write("These are the contents of the file.\r\n");
                    writer.Write("--taco--\r\n");
                }
                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                {
                    NameValueCollection collection = extractor.Parameters;
                    Assert.AreEqual("bob", collection.Get("name"), "Could not extract the name parameter.");
                    var files = extractor.Files.GetFiles("file");
                    Assert.AreEqual(1, files.Count(), "The wrong number of files were extracted.");
                    var file = files.First();
                    Assert.AreEqual("file", file.Name, "The name of the file part was not stored.");
                    Assert.AreEqual("help.txt", file.FileName, "The file name was not stored.");
                    Assert.AreEqual("text/plain", file.ContentType, "The file content type was not stored.");
                    Assert.AreEqual("These are the contents of the file.", Encoding.Default.GetString(file.Contents), "The file contents were wrong.");
                }
            }
        }
Esempio n. 33
0
        public void ShouldExtractMultiPartFormData()
        {
            using (FakeHttpServer server = new FakeHttpServer())
            {
                server.Host              = "localhost";
                server.Port              = 8080;
                server.Path              = "api/v1/accounts";
                server.StatusCode        = HttpStatusCode.OK;
                server.StatusDescription = "Success";

                MultiPartBodyExtractor extractor = new MultiPartBodyExtractor();
                server.UseBodyExtractor(extractor);

                server.Listen();

                WebRequest request = WebRequest.Create("http://localhost:8080/api/v1/accounts");
                request.Method      = "POST";
                request.ContentType = "multipart/form-data; boundary=taco";
                using (StreamWriter writer = new StreamWriter(request.GetRequestStream()))
                {
                    writer.Write("--taco\r\n");
                    writer.Write("Content-Disposition: form-data; name=name\r\n");
                    writer.Write("\r\n");
                    writer.Write("bob\r\n");
                    writer.Write("--taco\r\n");
                    writer.Write("Content-Disposition: form-data; name=file; filename=help.txt\r\n");
                    writer.Write("Content-Type: text/plain\r\n");
                    writer.Write("\r\n");
                    writer.Write("These are the contents of the file.\r\n");
                    writer.Write("--taco--\r\n");
                }
                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                {
                    NameValueCollection collection = extractor.Parameters;
                    Assert.AreEqual("bob", collection.Get("name"), "Could not extract the name parameter.");
                    var files = extractor.Files.GetFiles("file");
                    Assert.AreEqual(1, files.Count(), "The wrong number of files were extracted.");
                    var file = files.First();
                    Assert.AreEqual("file", file.Name, "The name of the file part was not stored.");
                    Assert.AreEqual("help.txt", file.FileName, "The file name was not stored.");
                    Assert.AreEqual("text/plain", file.ContentType, "The file content type was not stored.");
                    Assert.AreEqual("These are the contents of the file.", Encoding.Default.GetString(file.Contents), "The file contents were wrong.");
                }
            }
        }
Esempio n. 34
0
        public void ReadTestNegativeUnexpected()
        {
            const string recordKey1     = "123";
            const string responseBody1  = "unexpected";
            const int    responseStatus = 405;
            var          server         = new FakeHttpServer(Port, new[] { new FakeHttpServerResponse(responseStatus, responseBody1) });

            server.Start();
            var config = new StorageConfig(endPoint: "http://localhost:" + Port, apiKey: "apiKey",
                                           environmentId: "envId");

            using var storage = Storage.NewStorage(config);
            var exception = Assert.ThrowsAsync <StorageServerException>(() => storage.ReadAsync("country", recordKey1));

            Assert.IsTrue(exception.Message.Contains(
                              "Unexpected response: StatusCode: 405, ReasonPhrase: 'Method Not Allowed",
                              StringComparison.InvariantCulture));
            server.Stop();
        }
Esempio n. 35
0
        public void ShouldPostMultuPartWithInvalidCharacter()
        {
            using (FakeHttpServer server = new FakeHttpServer("http://localhost:8080/api/customers"))
            {
                MultiPartBodyExtractor extractor = new MultiPartBodyExtractor();
                server.UseBodyExtractor(extractor);

                server.Listen();

                RestClient client = new RestClient("http://localhost:8080");
                client.Post("api/customers")
                .WithMultiPartBody(b =>
                {
                    b.WithFormData(ub => ub.WithParameter("naӼme", "John Smith"));
                })
                .Execute();

                Assert.AreEqual("John Smith", extractor.Parameters["na?me"], "The form data was not transfered.");
            }
        }
Esempio n. 36
0
        public void FindOneTestPositiveTest()
        {
            var server = new FakeHttpServer(Port, new[] { new FakeHttpServerResponse(200, FindResponse) });

            server.Start();
            var config = new StorageConfig(endPoint: "http://localhost:" + Port, apiKey: "apiKey",
                                           environmentId: "envId");

            using var storage = Storage.NewStorage(config);
            const string recordKey = "456";
            const string body      = "body2";
            var          filter    = new FindFilter()
                                     .KeyEq(NumberField.Version, 0);
            var foundedRecord = storage.FindOneAsync("country", filter).Result;

            Assert.NotNull(foundedRecord);
            Assert.AreEqual(body, foundedRecord.Body);
            Assert.AreEqual(recordKey, foundedRecord.RecordKey);
            server.Stop();
        }
Esempio n. 37
0
        public void BatchWriteTestPositive()
        {
            var server = new FakeHttpServer(Port, new[] { new FakeHttpServerResponse(201, "Created") });

            server.Start();
            var config = new StorageConfig(endPoint: "http://localhost:" + Port, apiKey: "apiKey",
                                           environmentId: "envId");

            using var storage = Storage.NewStorage(config);
            const string recordKey1 = "123";
            const string recordKey2 = "345";
            var          recordList = new List <Record> {
                new Record(recordKey1), new Record(recordKey2)
            };
            var records = storage.BatchWriteAsync("country", recordList).Result;

            Assert.AreEqual(recordKey1, records[0].RecordKey);
            Assert.AreEqual(recordKey2, records[1].RecordKey);
            server.Stop();
        }
Esempio n. 38
0
        public void ShouldPostMultuPartWithBase64Content()
        {
            using (FakeHttpServer server = new FakeHttpServer("http://localhost:8080/api/customers"))
            {
                MultiPartBodyExtractor extractor = new MultiPartBodyExtractor();
                server.UseBodyExtractor(extractor);

                server.Listen();

                string message = "Hello, World!Ӽ!";
                byte[] messageRaw = Encoding.UTF8.GetBytes(message);
                string base64 = Convert.ToBase64String(messageRaw);
                byte[] base64Raw = Encoding.UTF8.GetBytes(base64);
                NameValueCollection headers = new NameValueCollection();
                headers.Add("Content-Transfer-Encoding", "base64");

                RestClient client = new RestClient("http://localhost:8080");
                client.Post("api/customers")
                    .WithMultiPartBody(b =>
                    {
                        b.WithFile("file", "file.txt", base64Raw, "text/plain", headers);
                    })
                    .Execute();

                var file = extractor.Files.GetFiles("file").Single();
                CollectionAssert.AreEqual(base64Raw, file.Contents);
            }
        }
Esempio n. 39
0
        public void ShouldPOSTWithFormDataObject()
        {
            using (FakeHttpServer server = new FakeHttpServer("http://localhost:8080/api/customers"))
            {
                var bodyExtractor = new UrlEncodedBodyExtractor();
                var extractor = new RequestExtractor(bodyExtractor);
                server.UseBodyExtractor(extractor);
                server.Listen();

                RestClient client = new RestClient();
                var response = client.Post("http://localhost:8080/api/customers")
                    .WithUrlEncodedBody(new
                    {
                        Name = "Bob Smith",
                        Age = 31,
                        Title = "Mr."
                    })
                    .Execute();

                string name = bodyExtractor.Parameters["Name"];
                string age = bodyExtractor.Parameters["Age"];
                string title = bodyExtractor.Parameters["Title"];

                Assert.AreEqual("Bob Smith", name, "The name was not sent.");
                Assert.AreEqual("31", age, "The age was not sent.");
                Assert.AreEqual("Mr.", title, "The title was not sent.");
            }
        }
Esempio n. 40
0
        public void ShouldPOSTWithArrayFormData()
        {
            using (FakeHttpServer server = new FakeHttpServer("http://localhost:8080/api/customers"))
            {
                var bodyExtractor = new UrlEncodedBodyExtractor();
                var extractor = new RequestExtractor(bodyExtractor);
                server.UseBodyExtractor(extractor);
                server.Listen();

                RestClient client = new RestClient();
                var response = client.Post("http://localhost:8080/api/customers")
                    .WithUrlEncodedBody(b => b
                        .WithParameter("CustomerId", 1)
                        .WithParameter("CustomerId", 2)
                        .WithParameter("CustomerId", 3))
                    .Execute();

                string[] ids = bodyExtractor.Parameters.GetValues("CustomerId");
                string[] expectedIds = new string[] { "1", "2", "3" };
                CollectionAssert.AreEquivalent(expectedIds, ids, "The array of values were not sent.");
            }
        }
Esempio n. 41
0
        public void ShouldPOSTWithJsonData()
        {
            using (FakeHttpServer server = new FakeHttpServer("http://localhost:8080/api/customers"))
            {
                var bodyExtractor = new JsonBodyExtractor<TestCustomer>();
                server.UseBodyExtractor(bodyExtractor);
                server.Listen();

                RestClient client = new RestClient();
                var response = client.Post("http://localhost:8080/api/customers")
                    .WithJsonBody(new TestCustomer() { Name = "Bob Smith", Age = 31, Title = "Mr." })
                    .Execute();

                var customer = bodyExtractor.Result;
                Assert.AreEqual("Bob Smith", customer.Name, "The name was not sent.");
                Assert.AreEqual(31, customer.Age, "The age was not sent.");
                Assert.AreEqual("Mr.", customer.Title, "The title was not sent.");
            }
        }
Esempio n. 42
0
        public void ShouldPOSTWithNoBody()
        {
            using (FakeHttpServer server = new FakeHttpServer("http://localhost:8080/api/customers"))
            {
                RequestExtractor extractor = new RequestExtractor();
                server.UseBodyExtractor(extractor);
                server.Listen();

                RestClient client = new RestClient();
                var response = client.Post("http://localhost:8080/api/customers")
                    .WhenError(r => { throw new Exception(r.FromString<string>()); })
                    .Execute();

                string contentLength = extractor.Headers["Content-Length"];
                Assert.AreEqual("0", contentLength, "The content length was not specified.");
            }
        }
Esempio n. 43
0
        public async Task ShouldPOSTMultiPartDataAsync()
        {
            using (FakeHttpServer server = new FakeHttpServer("http://localhost:8080/api/customers"))
            {
                MultiPartBodyExtractor extractor = new MultiPartBodyExtractor();
                server.UseBodyExtractor(extractor);

                server.Listen();

                RestClient client = new RestClient("http://localhost:8080");
                await client.Post("api/customers")
                    .WithMultiPartBody(b =>
                    {
                        b.WithFormData(ub => ub.WithParameter("name", "John Smith"));
                        b.WithFile("file1", "path", Encoding.UTF8.GetBytes("Hello, world"), "text/plain");
                    })
                    .ExecuteAsync();

                Assert.AreEqual("John Smith", extractor.Parameters["name"], "The form data was not transfered.");

                var file = extractor.Files.GetFiles("file1").SingleOrDefault();
                Assert.AreEqual("file1", file.Name);
                Assert.AreEqual("path", file.FileName);
                Assert.AreEqual("text/plain", file.ContentType);
                Assert.AreEqual("Hello, world", Encoding.UTF8.GetString(file.Contents));
            }
        }
Esempio n. 44
0
        public void ShouldGetInt32()
        {
            using (FakeHttpServer server = new FakeHttpServer("http://localhost:8080/numbers"))
            {
                server.ReturnString("4");
                server.Listen();

                RestClient client = new RestClient("http://localhost:8080");
                var response = client.Get("numbers")
                    .WhenSuccess(r => r.FromString<int>())
                    .Execute();
                Assert.IsTrue(response.IsSuccessStatusCode, "An error occurred getting the number.");
                Assert.AreEqual(4, response.GetResult<int>());
            }
        }
Esempio n. 45
0
        public void ShouldPostMultuPartWithInvalidCharacter()
        {
            using (FakeHttpServer server = new FakeHttpServer("http://localhost:8080/api/customers"))
            {
                MultiPartBodyExtractor extractor = new MultiPartBodyExtractor();
                server.UseBodyExtractor(extractor);

                server.Listen();

                RestClient client = new RestClient("http://localhost:8080");
                client.Post("api/customers")
                    .WithMultiPartBody(b =>
                    {
                        b.WithFormData(ub => ub.WithParameter("naӼme", "John Smith"));
                    })
                    .Execute();

                Assert.AreEqual("John Smith", extractor.Parameters["na?me"], "The form data was not transfered.");
            }
        }
Esempio n. 46
0
        public void ShouldGETWithCustomHeader()
        {
            using (FakeHttpServer server = new FakeHttpServer("http://localhost:8080/api/customers"))
            {
                var extractor = new RequestExtractor();
                server.UseBodyExtractor(extractor);
                server.Listen();

                RestClient client = new RestClient();
                var response = client.Get("http://localhost:8080/api/customers")
                    .WithHeader("test_header", "test_value")
                    .Execute();

                var value = extractor.Headers.Get("test_header");
                Assert.AreEqual("test_value", value, "The header was not passed to the server.");
            }
        }