Esempio n. 1
0
        public async Task TransportError()
        {
            var handler = new MockMessageHandler()
            {
                Exception = new HttpRequestException("Transport error"),
            };
            var factory = new MockHttpClientFactory(handler);
            var client  = new FirebaseMessagingClient(factory, MockCredential, "test-project");
            var message = new Message()
            {
                Topic = "test-topic",
            };

            var ex = await Assert.ThrowsAsync <FirebaseMessagingException>(
                async() => await client.SendAsync(message));

            Assert.Equal(ErrorCode.Unknown, ex.ErrorCode);
            Assert.Equal(
                "Unknown error while making a remote service call: Transport error",
                ex.Message);
            Assert.Null(ex.MessagingErrorCode);
            Assert.Null(ex.HttpResponse);
            Assert.Same(handler.Exception, ex.InnerException);

            var req = JsonConvert.DeserializeObject <FirebaseMessagingClient.SendRequest>(
                handler.LastRequestBody);

            Assert.Equal("test-topic", req.Message.Topic);
            Assert.False(req.ValidateOnly);
            Assert.Equal(1, handler.Calls);
        }
Esempio n. 2
0
        public async Task SendDryRunAsync()
        {
            var handler = new MockMessageHandler()
            {
                Response = new FirebaseMessagingClient.SingleMessageResponse()
                {
                    Name = "test-response",
                },
            };
            var factory = new MockHttpClientFactory(handler);
            var client  = new FirebaseMessagingClient(factory, MockCredential, "test-project");
            var message = new Message()
            {
                Topic = "test-topic",
            };

            var response = await client.SendAsync(message, dryRun : true);

            Assert.Equal("test-response", response);
            var req = JsonConvert.DeserializeObject <FirebaseMessagingClient.SendRequest>(handler.LastRequestBody);

            Assert.Equal("test-topic", req.Message.Topic);
            Assert.True(req.ValidateOnly);
            Assert.Equal(1, handler.Calls);
            this.CheckHeaders(handler.LastRequestHeaders);
        }
Esempio n. 3
0
        public async Task HttpErrorNoDetailAsync()
        {
            var handler = new MockMessageHandler()
            {
                StatusCode = HttpStatusCode.InternalServerError,
                Response   = @"{
                    ""error"": {
                        ""status"": ""PERMISSION_DENIED"",
                        ""message"": ""test error""
                    }
                }",
            };
            var factory = new MockHttpClientFactory(handler);
            var client  = new FirebaseMessagingClient(factory, MockCredential, "test-project");
            var message = new Message()
            {
                Topic = "test-topic",
            };

            var ex = await Assert.ThrowsAsync <FirebaseMessagingException>(
                async() => await client.SendAsync(message));

            Assert.Equal(ErrorCode.PermissionDenied, ex.ErrorCode);
            Assert.Equal("test error", ex.Message);
            Assert.Null(ex.MessagingErrorCode);
            Assert.NotNull(ex.HttpResponse);

            var req = JsonConvert.DeserializeObject <FirebaseMessagingClient.SendRequest>(
                handler.LastRequestBody);

            Assert.Equal("test-topic", req.Message.Topic);
            Assert.False(req.ValidateOnly);
            Assert.Equal(1, handler.Calls);
        }
Esempio n. 4
0
        public async Task HttpErrorNonJsonAsync()
        {
            var handler = new MockMessageHandler()
            {
                StatusCode = HttpStatusCode.InternalServerError,
                Response   = "not json",
            };
            var factory = new MockHttpClientFactory(handler);
            var client  = new FirebaseMessagingClient(factory, MockCredential, "test-project");
            var message = new Message()
            {
                Topic = "test-topic",
            };

            var ex = await Assert.ThrowsAsync <FirebaseMessagingException>(
                async() => await client.SendAsync(message));

            Assert.Equal(ErrorCode.Internal, ex.ErrorCode);
            Assert.Equal(
                "Unexpected HTTP response with status: 500 (InternalServerError)\nnot json",
                ex.Message);
            Assert.Null(ex.MessagingErrorCode);
            Assert.NotNull(ex.HttpResponse);

            var req = JsonConvert.DeserializeObject <FirebaseMessagingClient.SendRequest>(
                handler.LastRequestBody);

            Assert.Equal("test-topic", req.Message.Topic);
            Assert.False(req.ValidateOnly);
            Assert.Equal(1, handler.Calls);
        }
Esempio n. 5
0
        public async Task SendAllAsyncNullList()
        {
            var factory = new MockHttpClientFactory(new MockMessageHandler());
            var client  = new FirebaseMessagingClient(factory, MockCredential, "test-project");

            await Assert.ThrowsAsync <ArgumentNullException>(() => client.SendAllAsync(null));
        }
        public async Task SendAsync()
        {
            var handler = new MockMessageHandler()
            {
                Response = new FirebaseMessagingClient.SingleMessageResponse()
                {
                    Name = "test-response",
                },
            };
            var factory = new MockHttpClientFactory(handler);
            var client  = new FirebaseMessagingClient(factory, MockCredential, "test-project");
            var message = new Message()
            {
                Topic = "test-topic",
            };

            var response = await client.SendAsync(message);

            Assert.Equal("test-response", response);
            var req = JsonConvert.DeserializeObject <FirebaseMessagingClient.SendRequest>(handler.LastRequestBody);

            Assert.Equal("test-topic", req.Message.Topic);
            Assert.False(req.ValidateOnly);
            Assert.Equal(1, handler.Calls);
            var versionHeader = handler.LastRequestHeaders.GetValues("X-Firebase-Client").First();

            Assert.Equal(FirebaseMessagingClient.ClientVersion, versionHeader);
        }
Esempio n. 7
0
 public async Task SendAllAsyncWithTooManyMessages()
 {
     var factory  = new MockHttpClientFactory(new MockMessageHandler());
     var client   = new FirebaseMessagingClient(factory, MockCredential, "test-project");
     var messages = Enumerable.Range(0, 101).Select(_ => new Message {
         Topic = "test-topic"
     });
     await Assert.ThrowsAsync <ArgumentException>(() => client.SendAllAsync(messages));
 }
        public async Task HttpErrorAsync()
        {
            var handler = new MockMessageHandler()
            {
                StatusCode = HttpStatusCode.InternalServerError,
                Response   = "not json",
            };
            var factory = new MockHttpClientFactory(handler);
            var client  = new FirebaseMessagingClient(factory, MockCredential, "test-project");
            var message = new Message()
            {
                Topic = "test-topic",
            };
            var ex = await Assert.ThrowsAsync <FirebaseException>(
                async() => await client.SendAsync(message));

            Assert.Contains("not json", ex.Message);
            var req = JsonConvert.DeserializeObject <FirebaseMessagingClient.SendRequest>(
                handler.Request);

            Assert.Equal("test-topic", req.Message.Topic);
            Assert.False(req.ValidateOnly);
            Assert.Equal(1, handler.Calls);
        }
Esempio n. 9
0
        public async Task SendAllAsyncWithErrorNoDetail()
        {
            var rawResponse = @"
--batch_test-boundary
Content-Type: application/http
Content-ID: response-

HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Vary: Origin
Vary: X-Origin
Vary: Referer

{
  ""name"": ""projects/fir-adminintegrationtests/messages/8580920590356323124""
}

--batch_test-boundary
Content-Type: application/http
Content-ID: response-

HTTP/1.1 400 Bad Request
Content-Type: application/json; charset=UTF-8

{
  ""error"": {
    ""code"": 400,
    ""message"": ""The registration token is not a valid FCM registration token"",
    ""status"": ""INVALID_ARGUMENT""
  }
}

--batch_test-boundary
";
            var handler     = new MockMessageHandler()
            {
                Response     = rawResponse,
                ApplyHeaders = (_, headers) =>
                {
                    headers.Remove("Content-Type");
                    headers.TryAddWithoutValidation("Content-Type", "multipart/mixed; boundary=batch_test-boundary");
                },
            };
            var factory = new MockHttpClientFactory(handler);
            var client  = new FirebaseMessagingClient(new FirebaseMessagingClient.Args()
            {
                ClientFactory = factory,
                Credential    = MockCredential,
                ProjectId     = "test-project",
            });
            var message1 = new Message()
            {
                Token = "test-token1",
            };
            var message2 = new Message()
            {
                Token = "test-token2",
            };

            var response = await client.SendAllAsync(new[] { message1, message2 });

            Assert.Equal(1, response.SuccessCount);
            Assert.Equal(1, response.FailureCount);
            Assert.Equal("projects/fir-adminintegrationtests/messages/8580920590356323124", response.Responses[0].MessageId);

            var exception = response.Responses[1].Exception;

            Assert.NotNull(exception);
            Assert.Equal(ErrorCode.InvalidArgument, exception.ErrorCode);
            Assert.Equal("The registration token is not a valid FCM registration token", exception.Message);
            Assert.Null(exception.MessagingErrorCode);
            Assert.NotNull(exception.HttpResponse);

            Assert.Equal(1, handler.Calls);
            Assert.Equal(2, this.CountLinesWithPrefix(handler.LastRequestBody, VersionHeader));
            Assert.Equal(2, this.CountLinesWithPrefix(handler.LastRequestBody, ApiFormatHeader));
        }
Esempio n. 10
0
 public async Task SendAllAsyncWithNoMessages()
 {
     var factory = new MockHttpClientFactory(new MockMessageHandler());
     var client  = new FirebaseMessagingClient(factory, MockCredential, "test-project");
     await Assert.ThrowsAsync <ArgumentException>(() => client.SendAllAsync(Enumerable.Empty <Message>()));
 }
Esempio n. 11
0
        public async Task SendAllAsync()
        {
            var rawResponse = @"
--batch_test-boundary
Content-Type: application/http
Content-ID: response-

HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Vary: Origin
Vary: X-Origin
Vary: Referer

{
  ""name"": ""projects/fir-adminintegrationtests/messages/8580920590356323124""
}

--batch_test-boundary
Content-Type: application/http
Content-ID: response-

HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Vary: Origin
Vary: X-Origin
Vary: Referer

{
  ""name"": ""projects/fir-adminintegrationtests/messages/5903525881088369386""
}

--batch_test-boundary
";
            var handler     = new MockMessageHandler()
            {
                Response     = rawResponse,
                ApplyHeaders = (_, headers) =>
                {
                    headers.Remove("Content-Type");
                    headers.TryAddWithoutValidation("Content-Type", "multipart/mixed; boundary=batch_test-boundary");
                },
            };
            var factory  = new MockHttpClientFactory(handler);
            var client   = new FirebaseMessagingClient(factory, MockCredential, "test-project");
            var message1 = new Message()
            {
                Token = "test-token1",
            };
            var message2 = new Message()
            {
                Token = "test-token2",
            };

            var response = await client.SendAllAsync(new[] { message1, message2 });

            Assert.Equal(2, response.SuccessCount);
            Assert.Equal("projects/fir-adminintegrationtests/messages/8580920590356323124", response.Responses[0].MessageId);
            Assert.Equal("projects/fir-adminintegrationtests/messages/5903525881088369386", response.Responses[1].MessageId);
            Assert.Equal(1, handler.Calls);

            Assert.Equal(2, this.CountLinesWithPrefix(handler.LastRequestBody, VersionHeader));
            Assert.Equal(2, this.CountLinesWithPrefix(handler.LastRequestBody, ApiFormatHeader));
        }
        public async Task SendAllAsyncWithError()
        {
            var rawResponse = @"
--batch_test-boundary
Content-Type: application/http
Content-ID: response-

HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Vary: Origin
Vary: X-Origin
Vary: Referer

{
  ""name"": ""projects/fir-adminintegrationtests/messages/8580920590356323124""
}

--batch_test-boundary
Content-Type: application/http
Content-ID: response-

HTTP/1.1 400 Bad Request
Content-Type: application/json; charset=UTF-8
Vary: Origin
Vary: X-Origin
Vary: Referer

{
  ""error"": {
    ""code"": 400,
    ""message"": ""The registration token is not a valid FCM registration token"",
    ""errors"": [
      {
        ""message"": ""The registration token is not a valid FCM registration token"",
        ""domain"": ""global"",
        ""reason"": ""badRequest""
      }
    ],
    ""status"": ""INVALID_ARGUMENT""
  }
}

--batch_test-boundary
";
            var handler     = new MockMessageHandler()
            {
                Response            = rawResponse,
                ApplyContentHeaders = (headers) =>
                {
                    headers.Remove("Content-Type");
                    headers.TryAddWithoutValidation("Content-Type", "multipart/mixed; boundary=batch_test-boundary");
                },
            };
            var factory  = new MockHttpClientFactory(handler);
            var client   = new FirebaseMessagingClient(factory, MockCredential, "test-project");
            var message1 = new Message()
            {
                Token = "test-token1",
            };
            var message2 = new Message()
            {
                Token = "test-token2",
            };

            var response = await client.SendAllAsync(new[] { message1, message2 });

            Assert.Equal(1, response.SuccessCount);
            Assert.Equal(1, response.FailureCount);
            Assert.Equal("projects/fir-adminintegrationtests/messages/8580920590356323124", response.Responses[0].MessageId);
            Assert.NotNull(response.Responses[1].Exception);
            Assert.Equal(1, handler.Calls);
            var versionHeader = $"X-Firebase-Client: {FirebaseMessagingClient.ClientVersion}";

            Assert.Equal(2, this.CountLinesWithPrefix(handler.Request, versionHeader));
        }