@Test public void testRemoveTwiceOk() { AdsUtilityRegistry registry = AdsUtilityRegistry.getInstance(); registry.addUtility(AdsUtility.BATCH_JOB_HELPER); registry.popRegisteredUtilities(); registry.popRegisteredUtilities(); } }
@After public void tearDown() throws Exception { AdsUtilityRegistry.getInstance().popRegisteredUtilities(); }
@Override public String getUserAgent() { Set<AdsUtility> adsUtilities = adsUtilityRegistry.popRegisteredUtilities(); if (!adsLibConfiguration.isIncludeAdsUtilitiesInUserAgent() || adsUtilities.isEmpty()) { return null; } // Adheres to User-Agent product identifiers from RFC 7231. // https://tools.ietf.org/html/rfc7231#section-5.5.3 // Sorts the collection of utilities so output is deterministic. return Joiner.on(", ").skipNulls().join( Sets.newTreeSet(Collections2.transform(adsUtilities, ADS_UTILITY_FUNCTION))); } }
/** * Tests that if include utilities is false, the provider will return null (even if utilities * are registered). */ @Test public void testGenerateUserAgent_utilitiesRegistered_includeUtilitiesFalse() { when(adsLibConfiguration.isIncludeAdsUtilitiesInUserAgent()).thenReturn(false); adsUtilityRegistry.addUtility(AdsUtility.PRODUCT_PARTITION_TREE); String actualUserAgent = userAgentProvider.getUserAgent(); assertNull("User agent should be null if include utilities is false", actualUserAgent); assertTrue("User agent provider should clear utilities", adsUtilityRegistry.popRegisteredUtilities().isEmpty()); } }
@Test public void testAddNull_fails() { AdsUtilityRegistry registry = AdsUtilityRegistry.getInstance(); thrown.expect(NullPointerException.class); thrown.expectMessage("Null ads utility"); registry.addUtility(null); }
/** * Provider method for Guice to ensure that all objects that need an AdsUtilityRegistry obtain the * same instance, even if those objects were injected by different Guice injectors. */ @Provides private AdsUtilityRegistry getAdsUtilityRegistry() { return AdsUtilityRegistry.getInstance(); } }
@Override public Object handleInvocation(Object proxy, Method method, Object[] args) throws Throwable { UsesAdsUtilities utilityAnnotation = method.getAnnotation(UsesAdsUtilities.class); if (utilityAnnotation != null && utilityAnnotation.value() != null) { for (AdsUtility utility : utilityAnnotation.value()) { this.adsUtilityRegistry.addUtility(utility); } } try { return method.invoke(objectToProxy, args); } catch (InvocationTargetException e) { if (e.getCause() != null) { throw e.getCause(); } // An InvocationTargetException shouldn't have a null cause, but it's technically // possible since its constructors don't explicitly disallow null. In the unlikely // event that this happens, wrap the InvocationTargetException and throw it. throw new RuntimeException("Method invocation failed", e); } } }
@Override public String getUserAgent() { Set<AdsUtility> adsUtilities = adsUtilityRegistry.popRegisteredUtilities(); if (!adsLibConfiguration.isIncludeAdsUtilitiesInUserAgent() || adsUtilities.isEmpty()) { return null; } // Adheres to User-Agent product identifiers from RFC 7231. // https://tools.ietf.org/html/rfc7231#section-5.5.3 // Sorts the collection of utilities so output is deterministic. return Joiner.on(", ").skipNulls().join( Sets.newTreeSet(Collections2.transform(adsUtilities, ADS_UTILITY_FUNCTION))); } }
/** * Tests that the user agent provider will always return multiple user agent identifiers * in alphabetical order, regardless of the order of registration. */ @Test public void testGenerateUserAgent_multipleUtilitiesRegistered_includeUtilitiesTrue() { when(adsLibConfiguration.isIncludeAdsUtilitiesInUserAgent()).thenReturn(true); List<AdsUtility> adsUtilities = Arrays.asList( AdsUtility.PRODUCT_PARTITION_TREE, AdsUtility.SELECTOR_BUILDER, AdsUtility.REPORT_DOWNLOADER); for (int i = 0; i < adsUtilities.size(); i++) { Collections.shuffle(adsUtilities); for (AdsUtility adsUtility : adsUtilities) { adsUtilityRegistry.addUtility(adsUtility); } String expectedUserAgent = "ProductPartitionTree, ReportDownloader, SelectorBuilder"; String actualUserAgent = userAgentProvider.getUserAgent(); assertEquals( "User agent should include registered utilities in alphabetical order if include " + "utilities is true", expectedUserAgent, actualUserAgent); assertTrue("User agent provider should clear utilities", adsUtilityRegistry.popRegisteredUtilities().isEmpty()); } }
/** * Provider method for Guice to ensure that all objects that need an AdsUtilityRegistry obtain the * same instance, even if those objects were injected by different Guice injectors. */ @Provides private AdsUtilityRegistry getAdsUtilityRegistry() { return AdsUtilityRegistry.getInstance(); } }
@Override public Object handleInvocation(Object proxy, Method method, Object[] args) throws Throwable { UsesAdsUtilities utilityAnnotation = method.getAnnotation(UsesAdsUtilities.class); if (utilityAnnotation != null && utilityAnnotation.value() != null) { for (AdsUtility utility : utilityAnnotation.value()) { this.adsUtilityRegistry.addUtility(utility); } } try { return method.invoke(objectToProxy, args); } catch (InvocationTargetException e) { if (e.getCause() != null) { throw e.getCause(); } // An InvocationTargetException shouldn't have a null cause, but it's technically // possible since its constructors don't explicitly disallow null. In the unlikely // event that this happens, wrap the InvocationTargetException and throw it. throw new RuntimeException("Method invocation failed", e); } } }
@Test public void testAddDuplicate() { AdsUtilityRegistry registry = AdsUtilityRegistry.getInstance(); Set<AdsUtility> expectedUtilities = EnumSet.<AdsUtility>of(AdsUtility.BATCH_JOB_HELPER); registry.addUtility(AdsUtility.BATCH_JOB_HELPER); registry.addUtility(AdsUtility.BATCH_JOB_HELPER); assertEquals(expectedUtilities, registry.popRegisteredUtilities()); }
/** Checks the utilities registry status. */ public void checkUtilitiesState() { Set<AdsUtility> expectedUtilities = new HashSet<>(); expectedUtilities.add(AdsUtility.REPORT_QUERY_BUILDER); assertEquals( expectedUtilities, AdWordsInternals.getInstance().getAdsUtilityRegistry().popRegisteredUtilities()); }
@Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); adsUtilityRegistry = AdsUtilityRegistry.getInstance(); batchJobHelper = createBatchJobHelper(uploader); operations = ImmutableList.<OperationT>of(getPauseCampaignOperation(TEST_CAMPAIGN_ID)); }
/** * Tests that a single registered utility will result in the correct user agent if include * utilities is true. */ @Test public void testGenerateUserAgent_utilityRegistered_includeUtilitiesTrue() { when(adsLibConfiguration.isIncludeAdsUtilitiesInUserAgent()).thenReturn(true); adsUtilityRegistry.addUtility(AdsUtility.PRODUCT_PARTITION_TREE); String actualUserAgent = userAgentProvider.getUserAgent(); assertEquals("User agent should include registered utilities if include utilities is true", AdsUtility.PRODUCT_PARTITION_TREE.getUserAgentIdentifier(), actualUserAgent); }
/** Checks the utilities registry status. */ public void checkUtilitiesState() { Set<AdsUtility> expectedUtilities = new HashSet<>(); expectedUtilities.add(AdsUtility.REPORT_QUERY_BUILDER); assertEquals( expectedUtilities, AdWordsInternals.getInstance().getAdsUtilityRegistry().popRegisteredUtilities()); }
/** Checks the utilities registry status. */ public void checkUtilitiesState() { Set<AdsUtility> expectedUtilities = new HashSet<>(); expectedUtilities.add(AdsUtility.REPORT_QUERY_BUILDER); assertEquals( expectedUtilities, AdWordsInternals.getInstance().getAdsUtilityRegistry().popRegisteredUtilities()); }
/** * Tests that if no utilities are registered, the provider will return null. */ @Test public void testGenerateUserAgent_noUtilitiesRegistered_includeUtilitiesTrue() { when(adsLibConfiguration.isIncludeAdsUtilitiesInUserAgent()).thenReturn(true); String actualUserAgent = userAgentProvider.getUserAgent(); assertNull("User agent should be null if no utilities are registered", actualUserAgent); assertTrue("User agent provider should clear utilities", adsUtilityRegistry.popRegisteredUtilities().isEmpty()); }
@Before public void setUp() { AdWordsInternals.getInstance().getAdsUtilityRegistry().popRegisteredUtilities(); }
@Before public void setUp() { AdWordsInternals.getInstance().getAdsUtilityRegistry().popRegisteredUtilities(); }