@VisibleForTesting static String fromPackage(Package classPackage) { String agent = Optional.ofNullable(classPackage.getImplementationTitle()).orElse(DEFAULT_VALUE); String version = Optional.ofNullable(classPackage.getImplementationVersion()).orElse(DEFAULT_VALUE); return fromStrings(agent, version); } }
/** * Constructs a user agent from the {@link java.util.jar.Attributes.Name#IMPLEMENTATION_TITLE} and * {@link java.util.jar.Attributes.Name#IMPLEMENTATION_VERSION} of the package of the provided class. * Typically, these are extracted from {@code MANIFEST.MF} entries of the jar package containing the given class. * The default value for both properties is "{@value DEFAULT_VALUE}". * * @param clazz Class to construct the user agent for * @return a user agent string for the given class */ public static String fromClass(Class<?> clazz) { Package classPackage = clazz.getPackage(); return fromPackage(classPackage); }
@Test public void canGetUserAgentDataFromClass() { Class<BlockingDeque> clazz = BlockingDeque.class; String expectedUserAgent = UserAgents.fromStrings( clazz.getPackage().getImplementationTitle(), clazz.getPackage().getImplementationVersion()); MatcherAssert.assertThat(UserAgents.fromClass(clazz), is(expectedUserAgent)); } }
@Test public void userAgentIncludesAtlasDb() { MatcherAssert.assertThat(UserAgents.fromStrings(PACKAGE_TITLE, PACKAGE_VERSION), is(PACKAGE_USER_AGENT)); }
@Test public void addsDefaultUserAgentDataIfUnknown() { Package classPackage = mock(Package.class); when(classPackage.getImplementationTitle()).thenReturn(null); when(classPackage.getImplementationVersion()).thenReturn(null); MatcherAssert.assertThat(UserAgents.fromPackage(classPackage), is(DEFAULT_USER_AGENT)); }
@Test public void directProxyIsConfigurableOnClientRequests() { Optional<ProxySelector> directProxySelector = Optional.of( ServiceCreator.createProxySelector(ProxyConfiguration.DIRECT)); TestResource clientWithDirectCall = AtlasDbHttpClients.createProxyWithFailover( new MetricRegistry(), NO_SSL, directProxySelector, ImmutableSet.of(getUriForPort(availablePort)), TestResource.class); clientWithDirectCall.getTestNumber(); String defaultUserAgent = UserAgents.fromStrings(UserAgents.DEFAULT_VALUE, UserAgents.DEFAULT_VALUE); availableServer.verify(getRequestedFor(urlMatching(TEST_ENDPOINT)) .withHeader(FeignOkHttpClients.USER_AGENT_HEADER, WireMock.equalTo(defaultUserAgent))); }
@Test public void canGetUserAgentDataFromPackage() { Package classPackage = mock(Package.class); when(classPackage.getImplementationVersion()).thenReturn(PACKAGE_VERSION); when(classPackage.getImplementationTitle()).thenReturn(PACKAGE_TITLE); MatcherAssert.assertThat(UserAgents.fromPackage(classPackage), is(PACKAGE_USER_AGENT)); }
@Test public void userAgentIsPresentOnClientRequests() { TestResource client = AtlasDbHttpClients.createProxy( new MetricRegistry(), NO_SSL, getUriForPort(availablePort), TestResource.class); client.getTestNumber(); String defaultUserAgent = UserAgents.fromStrings(UserAgents.DEFAULT_VALUE, UserAgents.DEFAULT_VALUE); availableServer.verify(getRequestedFor(urlMatching(TEST_ENDPOINT)) .withHeader(FeignOkHttpClients.USER_AGENT_HEADER, WireMock.equalTo(defaultUserAgent))); }
/** * Constructs a user agent from the {@link java.util.jar.Attributes.Name#IMPLEMENTATION_TITLE} and * {@link java.util.jar.Attributes.Name#IMPLEMENTATION_VERSION} of the package of the provided class. * Typically, these are extracted from {@code MANIFEST.MF} entries of the jar package containing the given class. * The default value for both properties is "{@value DEFAULT_VALUE}". * * @param clazz Class to construct the user agent for * @return a user agent string for the given class */ public static String fromClass(Class<?> clazz) { Package classPackage = clazz.getPackage(); return fromPackage(classPackage); }
@Test public void httpProxyIsConfigurableOnClientRequests() { Optional<ProxySelector> httpProxySelector = Optional.of( ServiceCreator.createProxySelector(ProxyConfiguration.of(getHostAndPort(proxyPort)))); TestResource clientWithHttpProxy = AtlasDbHttpClients.createProxyWithFailover( new MetricRegistry(), NO_SSL, httpProxySelector, ImmutableSet.of(getUriForPort(availablePort)), TestResource.class); clientWithHttpProxy.getTestNumber(); String defaultUserAgent = UserAgents.fromStrings(UserAgents.DEFAULT_VALUE, UserAgents.DEFAULT_VALUE); proxyServer.verify(getRequestedFor(urlMatching(TEST_ENDPOINT)) .withHeader(FeignOkHttpClients.USER_AGENT_HEADER, WireMock.equalTo(defaultUserAgent))); availableServer.verify(0, getRequestedFor(urlMatching(TEST_ENDPOINT))); }
@VisibleForTesting static String fromPackage(Package classPackage) { String agent = Optional.ofNullable(classPackage.getImplementationTitle()).orElse(DEFAULT_VALUE); String version = Optional.ofNullable(classPackage.getImplementationVersion()).orElse(DEFAULT_VALUE); return fromStrings(agent, version); } }