+ public void testSimpleImmediateSuccess() {
+ tracker.addData(makeData(policy1, PDP1));
+
+ // indicate that PDP1 has succeeded
+ List<PolicyStatus> statusList = new ArrayList<>();
+ tracker.processResponse(PDP1, Arrays.asList(policy1), statusList);
+
+ assertEquals(1, statusList.size());
+ assertEquals(policy1, statusList.get(0).getPolicy());
+ assertEquals(type, statusList.get(0).getPolicyType());
+ assertEquals("[1, 0, 0]", getCounts(statusList.get(0)).toString());
+
+ // indicate that PDP1 has succeeded again - should be no output
+ statusList.clear();
+ tracker.processResponse(PDP1, Arrays.asList(policy1), statusList);
+ assertEquals(0, statusList.size());
+
+ // indicate failure
+ statusList.clear();
+ tracker.processResponse(PDP1, Arrays.asList(), statusList);
+ assertEquals(1, statusList.size());
+ assertEquals("[0, 1, 0]", getCounts(statusList.get(0)).toString());
+
+ // indicate that PDP1 has failed again - should be no output
+ statusList.clear();
+ tracker.processResponse(PDP1, Arrays.asList(), statusList);
+ assertEquals(0, statusList.size());
+
+ // indicate that PDP1 has succeeded again
+ statusList.clear();
+ tracker.processResponse(PDP1, Arrays.asList(policy1), statusList);
+ assertEquals("[1, 0, 0]", getCounts(statusList.get(0)).toString());
+ }
+
+ /**
+ * Simple test with one PDP that immediately responds with success.
+ */
+ @Test
+ public void testSimpleImmediateFail() {
+ tracker.addData(makeData(policy1, PDP1));
+
+ // indicate that PDP1 has failed
+ List<PolicyStatus> statusList = new ArrayList<>();
+ tracker.processResponse(PDP1, Arrays.asList(), statusList);
+ assertEquals(1, statusList.size());
+ assertEquals("[0, 1, 0]", getCounts(statusList.get(0)).toString());
+
+ // indicate that PDP1 has failed again - should be no output
+ statusList.clear();
+ tracker.processResponse(PDP1, Arrays.asList(), statusList);
+ assertEquals(0, statusList.size());
+
+ // indicate success
+ tracker.processResponse(PDP1, Arrays.asList(policy1), statusList);
+
+ assertEquals(1, statusList.size());
+ assertEquals(policy1, statusList.get(0).getPolicy());
+ assertEquals(type, statusList.get(0).getPolicyType());
+ assertEquals("[1, 0, 0]", getCounts(statusList.get(0)).toString());
+
+ // indicate that PDP1 has succeeded again - should be no output
+ statusList.clear();
+ tracker.processResponse(PDP1, Arrays.asList(policy1), statusList);
+ assertEquals(0, statusList.size());
+ }
+
+ /**
+ * Simple test where PDP is removed and then it responds.
+ */
+ @Test
+ public void testSimpleRemove() {
+ tracker.addData(makeData(policy1, PDP1));
+
+ // remove the PDP
+ List<PolicyStatus> statusList = new ArrayList<>();
+ tracker.removePdp(PDP1, statusList);
+ assertEquals(1, statusList.size());
+ assertEquals(policy1, statusList.get(0).getPolicy());
+ assertEquals(type, statusList.get(0).getPolicyType());
+ assertEquals("[0, 0, 0]", getCounts(statusList.get(0)).toString());
+
+ /*
+ * indicate that PDP1 has succeeded - should be no message since PDP was removed
+ * from the policy
+ */
+ statusList.clear();
+ tracker.processResponse(PDP1, Arrays.asList(policy1), statusList);
+ assertEquals(0, statusList.size());
+
+ /*
+ * indicate that PDP1 has failed - should be no message since PDP was removed
+ * from the policy
+ */
+ statusList.clear();
+ tracker.processResponse(PDP1, Arrays.asList(), statusList);
+ assertEquals(0, statusList.size());
+ }
+
+ /**
+ * Test with multiple PDPs.
+ */
+ @Test
+ public void testMulti() {