MCPcopy Create free account
hub / github.com/InterviewReady/Low-Level-Design / LBTester

Class LBTester

service-orchestrator/src/test/java/LBTester.java:9–70  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

7import org.junit.Test;
8
9public 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);

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected