@Test public void testMergeWithTracer() { ApiTracer explicitTracer = Mockito.mock(ApiTracer.class); GrpcCallContext ctxWithExplicitTracer = GrpcCallContext.createDefault().withTracer(explicitTracer); GrpcCallContext ctxWithDefaultTracer = GrpcCallContext.createDefault(); ApiTracer defaultTracer = ctxWithDefaultTracer.getTracer(); // Explicit tracer overrides the default tracer. Truth.assertThat(ctxWithDefaultTracer.merge(ctxWithExplicitTracer).getTracer()) .isSameAs(explicitTracer); // Default tracer does not override an explicit tracer. Truth.assertThat(ctxWithExplicitTracer.merge(ctxWithDefaultTracer).getTracer()) .isSameAs(explicitTracer); // Default tracer does not override another default tracer. Truth.assertThat(ctxWithDefaultTracer.merge(GrpcCallContext.createDefault()).getTracer()) .isSameAs(defaultTracer); }
@Test public void testMergeWithNullStreamingWaitTimeout() { Duration timeout = Duration.ofSeconds(10); GrpcCallContext baseContext = GrpcCallContext.createDefault().withStreamWaitTimeout(timeout); GrpcCallContext defaultOverlay = GrpcCallContext.createDefault(); Truth.assertThat(baseContext.merge(defaultOverlay).getStreamWaitTimeout()).isEqualTo(timeout); GrpcCallContext explicitNullOverlay = GrpcCallContext.createDefault().withStreamWaitTimeout(null); Truth.assertThat(baseContext.merge(explicitNullOverlay).getStreamWaitTimeout()) .isEqualTo(timeout); }
@Test public void testMergeWithNullStreamingIdleTimeout() { Duration timeout = Duration.ofSeconds(10); GrpcCallContext baseContext = GrpcCallContext.createDefault().withStreamIdleTimeout(timeout); GrpcCallContext defaultOverlay = GrpcCallContext.createDefault(); Truth.assertThat(baseContext.merge(defaultOverlay).getStreamIdleTimeout()).isEqualTo(timeout); GrpcCallContext explicitNullOverlay = GrpcCallContext.createDefault().withStreamIdleTimeout(null); Truth.assertThat(baseContext.merge(explicitNullOverlay).getStreamIdleTimeout()) .isEqualTo(timeout); }
@Test public void testMergeWrongType() { thrown.expect(IllegalArgumentException.class); GrpcCallContext.createDefault().merge(FakeCallContext.createDefault()); }
@Test public void testMergeWithNullTimeout() { Duration timeout = Duration.ofSeconds(10); GrpcCallContext baseContext = GrpcCallContext.createDefault().withTimeout(timeout); GrpcCallContext defaultOverlay = GrpcCallContext.createDefault(); Truth.assertThat(baseContext.merge(defaultOverlay).getTimeout()).isEqualTo(timeout); GrpcCallContext explicitNullOverlay = GrpcCallContext.createDefault().withTimeout(null); Truth.assertThat(baseContext.merge(explicitNullOverlay).getTimeout()).isEqualTo(timeout); }
@Test public void testMergeWithTimeout() { Duration timeout = Duration.ofSeconds(19); GrpcCallContext ctx1 = GrpcCallContext.createDefault(); GrpcCallContext ctx2 = GrpcCallContext.createDefault().withTimeout(timeout); Truth.assertThat(ctx1.merge(ctx2).getTimeout()).isEqualTo(timeout); }
@Test public void testMergeWithStreamingWaitTimeout() { Duration timeout = Duration.ofSeconds(19); GrpcCallContext ctx1 = GrpcCallContext.createDefault(); GrpcCallContext ctx2 = GrpcCallContext.createDefault().withStreamWaitTimeout(timeout); Truth.assertThat(ctx1.merge(ctx2).getStreamWaitTimeout()).isEqualTo(timeout); }
@Test public void testMergeWithStreamingIdleTimeout() { Duration timeout = Duration.ofSeconds(19); GrpcCallContext ctx1 = GrpcCallContext.createDefault(); GrpcCallContext ctx2 = GrpcCallContext.createDefault().withStreamIdleTimeout(timeout); Truth.assertThat(ctx1.merge(ctx2).getStreamIdleTimeout()).isEqualTo(timeout); }
@Test public void testMergeWithExtraHeaders() { Map<String, List<String>> extraHeaders1 = createTestExtraHeaders("key1", "value1", "key1", "value2"); GrpcCallContext ctx1 = GrpcCallContext.createDefault().withExtraHeaders(extraHeaders1); Map<String, List<String>> extraHeaders2 = createTestExtraHeaders("key1", "value2", "key2", "value2"); GrpcCallContext ctx2 = GrpcCallContext.createDefault().withExtraHeaders(extraHeaders2); ApiCallContext mergedApiCallContext = ctx1.merge(ctx2); Truth.assertThat(mergedApiCallContext).isInstanceOf(GrpcCallContext.class); GrpcCallContext mergedGrpcCallContext = (GrpcCallContext) mergedApiCallContext; Map<String, List<String>> gotExtraHeaders = mergedGrpcCallContext.getExtraHeaders(); Map<String, List<String>> expectedExtraHeaders = createTestExtraHeaders( "key1", "value1", "key1", "value2", "key1", "value2", "key2", "value2"); Truth.assertThat(gotExtraHeaders).containsExactlyEntriesIn(expectedExtraHeaders); }
@Test public void testMergeWithCustomCallOptions() { CallOptions.Key<String> key = CallOptions.Key.createWithDefault("somekey", "somedefault"); GrpcCallContext ctx1 = GrpcCallContext.createDefault(); GrpcCallContext ctx2 = GrpcCallContext.createDefault() .withCallOptions(CallOptions.DEFAULT.withOption(key, "somevalue")); GrpcCallContext merged = (GrpcCallContext) ctx1.merge(ctx2); Truth.assertThat(merged.getCallOptions().getOption(key)) .isNotEqualTo(ctx1.getCallOptions().getOption(key)); Truth.assertThat(merged.getCallOptions().getOption(key)) .isEqualTo(ctx2.getCallOptions().getOption(key)); }