@@ -32,40 +32,51 @@ void updatePoliciesReturnsTrueOnFirstSet() {
3232 }
3333
3434 @ Test
35- void updatePoliciesReturnsFalseWhenEqualContent () {
35+ void updatePoliciesAcceptsRepeatedEquivalentSnapshot () {
3636 PolicyStore store = new PolicyStore ();
3737 assertThat (store .updatePolicies (singletonList (new TraceSamplingRatePolicy (0.5 )))).isTrue ();
38- assertThat (store .updatePolicies (singletonList (new TraceSamplingRatePolicy (0.5 )))).isFalse ();
38+ assertThat (store .updatePolicies (singletonList (new TraceSamplingRatePolicy (0.5 )))).isTrue ();
3939 }
4040
4141 @ Test
4242 void updatePoliciesReturnsTrueWhenProbabilityChanges () {
4343 PolicyStore store = new PolicyStore ();
4444 assertThat (store .updatePolicies (singletonList (new TraceSamplingRatePolicy (0.25 )))).isTrue ();
4545 assertThat (store .updatePolicies (singletonList (new TraceSamplingRatePolicy (0.75 )))).isTrue ();
46- assertThat (store .getPolicies ()).containsExactly (new TraceSamplingRatePolicy (0.75 ));
46+ assertThat (store .getPolicies ()).hasSize (1 );
47+ assertThat (((TraceSamplingRatePolicy ) store .getPolicies ().get (0 )).getProbability ())
48+ .isEqualTo (0.75 );
4749 }
4850
4951 @ Test
50- void updatePoliciesReturnsFalseWhenOnlyOrderDiffers () {
52+ void updatePoliciesAcceptsReorderedSnapshot () {
5153 PolicyStore store = new PolicyStore ();
5254 List <TelemetryPolicy > first =
53- Arrays .asList (new TraceSamplingRatePolicy (0.1 ), new TraceSamplingRatePolicy (0.2 ));
54- List <TelemetryPolicy > reordered =
55- Arrays .asList (new TraceSamplingRatePolicy (0.2 ), new TraceSamplingRatePolicy (0.1 ));
55+ Arrays .asList (
56+ new TestTelemetryPolicy (
57+ new TelemetryPolicyIdentity ("first-policy" , "First policy" ), "test-policy" ),
58+ new TestTelemetryPolicy (
59+ new TelemetryPolicyIdentity ("second-policy" , "Second policy" ), "test-policy" ));
60+ List <TelemetryPolicy > reordered = Arrays .asList (first .get (1 ), first .get (0 ));
5661
5762 assertThat (store .updatePolicies (first )).isTrue ();
58- assertThat (store .updatePolicies (reordered )).isFalse ();
59- assertThat (store .getPolicies ()).isEqualTo ( first );
63+ assertThat (store .updatePolicies (reordered )).isTrue ();
64+ assertThat (store .getPolicies ()).containsExactly ( reordered . get ( 0 ), reordered . get ( 1 ) );
6065 }
6166
6267 @ Test
63- void updatePoliciesIgnoresDuplicatePoliciesInInput () {
68+ void updatePoliciesIgnoresDuplicatePolicyIdentitiesInInput () {
6469 PolicyStore store = new PolicyStore ();
65- TraceSamplingRatePolicy p = new TraceSamplingRatePolicy (0.5 );
66- assertThat (store .updatePolicies (Arrays .asList (p , new TraceSamplingRatePolicy (0.5 )))).isTrue ();
67- assertThat (store .getPolicies ()).containsExactly (p );
68- assertThat (store .updatePolicies (singletonList (new TraceSamplingRatePolicy (0.5 )))).isFalse ();
70+ TelemetryPolicy first =
71+ new TestTelemetryPolicy (
72+ new TelemetryPolicyIdentity ("test-policy" , "Test policy" ), "test-policy" );
73+ TelemetryPolicy duplicate =
74+ new TestTelemetryPolicy (
75+ new TelemetryPolicyIdentity ("test-policy" , "Updated name" ), "test-policy" );
76+
77+ assertThat (store .updatePolicies (Arrays .asList (first , duplicate ))).isTrue ();
78+
79+ assertThat (store .getPolicies ()).containsExactly (first );
6980 }
7081
7182 @ Test
@@ -85,7 +96,8 @@ void registerImplementerReceivesCurrentRelevantPolicies() {
8596
8697 store .registerImplementer (implementer );
8798
88- verify (implementer ).onPoliciesChanged (singletonList (new TraceSamplingRatePolicy (0.5 )));
99+ verify (implementer )
100+ .onPoliciesChanged (argThat (policies -> containsTraceSamplingProbability (policies , 0.5 )));
89101 }
90102
91103 @ Test
@@ -97,7 +109,8 @@ void updatePoliciesNotifiesRegisteredImplementerWithRelevantPolicies() {
97109 clearInvocations (implementer );
98110 store .updatePolicies (Arrays .asList (unrelatedPolicy (), new TraceSamplingRatePolicy (0.25 )));
99111
100- verify (implementer ).onPoliciesChanged (singletonList (new TraceSamplingRatePolicy (0.25 )));
112+ verify (implementer )
113+ .onPoliciesChanged (argThat (policies -> containsTraceSamplingProbability (policies , 0.25 )));
101114 }
102115
103116 @ Test
@@ -145,7 +158,7 @@ void updatePoliciesNotifiesDeletedPolicyForAnyIdentityBearingPolicy() {
145158 PolicyImplementer implementer = implementerFor ("test-policy" );
146159 TestTelemetryPolicy removedPolicy =
147160 new TestTelemetryPolicy (
148- new TelemetryPolicyIdentity ("test-policy-id" , "Test policy" ), "test-policy" , "old" );
161+ new TelemetryPolicyIdentity ("test-policy-id" , "Test policy" ), "test-policy" );
149162 store .updatePolicies (singletonList (removedPolicy ));
150163 store .registerImplementer (implementer );
151164 clearInvocations (implementer );
@@ -219,18 +232,25 @@ private static PolicyImplementer implementerFor(String policyType) {
219232
220233 private static TelemetryPolicy unrelatedPolicy () {
221234 return new TestTelemetryPolicy (
222- new TelemetryPolicyIdentity ("other-policy" , "Other policy" ), "other-policy" , "value" );
235+ new TelemetryPolicyIdentity ("other-policy" , "Other policy" ), "other-policy" );
236+ }
237+
238+ private static boolean containsTraceSamplingProbability (
239+ List <TelemetryPolicy > policies , double probability ) {
240+ if (policies .size () != 1 || !(policies .get (0 ) instanceof TraceSamplingRatePolicy )) {
241+ return false ;
242+ }
243+ TraceSamplingRatePolicy policy = (TraceSamplingRatePolicy ) policies .get (0 );
244+ return Double .compare (policy .getProbability (), probability ) == 0 ;
223245 }
224246
225247 private static final class TestTelemetryPolicy implements TelemetryPolicy {
226248 private final TelemetryPolicyIdentity identity ;
227249 private final String type ;
228- private final String value ;
229250
230- private TestTelemetryPolicy (TelemetryPolicyIdentity identity , String type , String value ) {
251+ private TestTelemetryPolicy (TelemetryPolicyIdentity identity , String type ) {
231252 this .identity = identity ;
232253 this .type = type ;
233- this .value = value ;
234254 }
235255
236256 @ Override
@@ -242,25 +262,5 @@ public TelemetryPolicyIdentity getIdentity() {
242262 public String getType () {
243263 return type ;
244264 }
245-
246- @ Override
247- public boolean equals (Object obj ) {
248- if (this == obj ) {
249- return true ;
250- }
251- if (!(obj instanceof TestTelemetryPolicy )) {
252- return false ;
253- }
254- TestTelemetryPolicy that = (TestTelemetryPolicy ) obj ;
255- return identity .equals (that .identity ) && type .equals (that .type ) && value .equals (that .value );
256- }
257-
258- @ Override
259- public int hashCode () {
260- int result = identity .hashCode ();
261- result = 31 * result + type .hashCode ();
262- result = 31 * result + value .hashCode ();
263- return result ;
264- }
265265 }
266266}
0 commit comments