| 7 | import org.junit.Test; |
| 8 | |
| 9 | public class LBTester { |
| 10 | @Test |
| 11 | public void LBDefaultBehaviour() { |
| 12 | LoadBalancer loadBalancer = new LoadBalancer(); |
| 13 | final var consistentHashing = new ConsistentHashing(point -> (long) Math.abs(point.hashCode()) % 100, 1); |
| 14 | final String profileServiceId = "profile", smsServiceId = "sms", emailServiceId = "email"; |
| 15 | |
| 16 | loadBalancer.register(new Service(profileServiceId, consistentHashing, new String[]{"addProfile", "deleteProfile", "updateProfile"})); |
| 17 | loadBalancer.register(new Service(smsServiceId, new WeightedRoundRobin(), new String[]{"sendSms", "addTemplate", "getSMSForUser"})); |
| 18 | loadBalancer.register(new Service(emailServiceId, new WeightedRoundRobin(), new String[]{"sendEmail", "addTemplate", "getSMSForUser"})); |
| 19 | |
| 20 | final Node pNode1 = new Node("51", "35.45.55.65", 2), pNode2 = new Node("22", "35.45.55.66", 3); |
| 21 | loadBalancer.addNode(profileServiceId, pNode1); |
| 22 | loadBalancer.addNode(profileServiceId, pNode2); |
| 23 | |
| 24 | final Node sNode1 = new Node("13", "35.45.55.67"), sNode2 = new Node("64", "35.45.55.68"); |
| 25 | loadBalancer.addNode(smsServiceId, sNode1); |
| 26 | loadBalancer.addNode(smsServiceId, sNode2); |
| 27 | |
| 28 | final Node eNode1 = new Node("node-35", "35.45.55.69", 2), eNode2 = new Node("node-76", "35.45.55.70"); |
| 29 | loadBalancer.addNode(emailServiceId, eNode1); |
| 30 | loadBalancer.addNode(emailServiceId, eNode2); |
| 31 | |
| 32 | var profileNode1 = loadBalancer.getHandler(new Request("r-123", profileServiceId, "addProfile")); |
| 33 | var profileNode2 = loadBalancer.getHandler(new Request("r-244", profileServiceId, "addProfile")); |
| 34 | var profileNode3 = loadBalancer.getHandler(new Request("r-659", profileServiceId, "addProfile")); |
| 35 | var profileNode4 = loadBalancer.getHandler(new Request("r-73", profileServiceId, "addProfile")); |
| 36 | Assert.assertEquals(pNode1, profileNode1); |
| 37 | Assert.assertEquals(pNode1, profileNode2); |
| 38 | Assert.assertEquals(pNode2, profileNode3); |
| 39 | Assert.assertEquals(pNode1, profileNode4); |
| 40 | |
| 41 | loadBalancer.removeNode(profileServiceId, pNode1.getId()); |
| 42 | |
| 43 | profileNode1 = loadBalancer.getHandler(new Request("r-123", profileServiceId, "addProfile")); |
| 44 | profileNode2 = loadBalancer.getHandler(new Request("r-244", profileServiceId, "addProfile")); |
| 45 | profileNode3 = loadBalancer.getHandler(new Request("r-659", profileServiceId, "addProfile")); |
| 46 | profileNode4 = loadBalancer.getHandler(new Request("r-73", profileServiceId, "addProfile")); |
| 47 | Assert.assertEquals(pNode2, profileNode1); |
| 48 | Assert.assertEquals(pNode2, profileNode2); |
| 49 | Assert.assertEquals(pNode2, profileNode3); |
| 50 | Assert.assertEquals(pNode2, profileNode4); |
| 51 | |
| 52 | final var smsNode1 = loadBalancer.getHandler(new Request("r-124", smsServiceId, "addTemplate")); |
| 53 | final var smsNode2 = loadBalancer.getHandler(new Request("r-1214", smsServiceId, "addTemplate")); |
| 54 | final var smsNode3 = loadBalancer.getHandler(new Request("r-4", smsServiceId, "addTemplate")); |
| 55 | |
| 56 | Assert.assertEquals(sNode1, smsNode1); |
| 57 | Assert.assertEquals(sNode2, smsNode2); |
| 58 | Assert.assertEquals(sNode1, smsNode3); |
| 59 | |
| 60 | final var emailNode1 = loadBalancer.getHandler(new Request("r-1232", emailServiceId, "addTemplate")); |
| 61 | final var emailNode2 = loadBalancer.getHandler(new Request("r-4134", emailServiceId, "addTemplate")); |
| 62 | final var emailNode3 = loadBalancer.getHandler(new Request("r-23432", emailServiceId, "addTemplate")); |
| 63 | final var emailNode4 = loadBalancer.getHandler(new Request("r-5345", emailServiceId, "addTemplate")); |
| 64 | |
| 65 | Assert.assertEquals(eNode1, emailNode1); |
| 66 | Assert.assertEquals(eNode1, emailNode2); |
nothing calls this directly
no outgoing calls
no test coverage detected