blob: 9cf3cf7138ea00ac0d155d07e6e7b50e759236fe (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
package com.yahoo.vespa.hosted.node.verification.spec;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yahoo.vespa.hosted.node.verification.mock.MockCommandExecutor;
import com.yahoo.vespa.hosted.node.verification.commons.noderepo.NodeRepoInfoRetriever;
import com.yahoo.vespa.hosted.node.verification.commons.noderepo.NodeRepoJsonModel;
import com.yahoo.vespa.hosted.node.verification.spec.retrievers.HardwareInfo;
import com.yahoo.vespa.hosted.node.verification.commons.report.SpecVerificationReport;
import org.junit.Before;
import org.junit.Test;
import java.io.File;
import java.net.URL;
import java.nio.file.Paths;
import java.util.ArrayList;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
public class SpecVerifierTest {
private MockCommandExecutor mockCommandExecutor;
private static final String ABSOLUTE_PATH = Paths.get(".").toAbsolutePath().normalize().toString();
private static final String RESOURCE_PATH = "src/test/java/com/yahoo/vespa/hosted/node/verification/spec/resources";
private static final String URL_RESOURCE_PATH = "file://" + ABSOLUTE_PATH + "/" + RESOURCE_PATH;
private static final String NODE_REPO_PATH = "src/test/java/com/yahoo/vespa/hosted/node/verification/spec/resources/nodeInfoTest.json";
private static final String CPU_INFO_PATH = RESOURCE_PATH + "/cpuinfoTest";
private static final String MEMORY_INFO_PATH = RESOURCE_PATH + "/meminfoTest";
private static final String FAST_DISK_TYPE_INFO_PATH = RESOURCE_PATH + "/DiskTypeFastDisk";
private static final String NON_FAST_DISK_TYPE_INFO_PATH = RESOURCE_PATH + "/DiskTypeNonFastDisk";
private static final String DISK_SIZE_INFO_PATH = RESOURCE_PATH + "/filesize";
private static final String NET_INTERFACE_INFO_PATH = RESOURCE_PATH + "/ifconfig";
private static final String NET_INTERFACE_SPEED_INFO_PATH = RESOURCE_PATH + "/eth0";
private static final String PING_RESPONSE = RESOURCE_PATH + "/validpingresponse";
private static final String INVALID_PING_RESPONSE = RESOURCE_PATH + "/pingresponse-all-packets-lost";
private static final double DELTA = 0.1;
ArrayList<URL> nodeInfoUrls;
@Before
public void setup() {
mockCommandExecutor = new MockCommandExecutor();
nodeInfoUrls = new ArrayList<>();
}
@Test
public void verifySpec_equal_nodeRepoInfo_and_hardware_should_return_true() throws Exception {
nodeInfoUrls.add(new URL(URL_RESOURCE_PATH + "/nodeRepo.json"));
mockCommandExecutor.addCommand("cat " + CPU_INFO_PATH);
mockCommandExecutor.addCommand("cat " + MEMORY_INFO_PATH);
mockCommandExecutor.addCommand("cat " + FAST_DISK_TYPE_INFO_PATH);
mockCommandExecutor.addCommand("cat " + DISK_SIZE_INFO_PATH);
mockCommandExecutor.addCommand("cat " + NET_INTERFACE_INFO_PATH);
mockCommandExecutor.addCommand("cat " + NET_INTERFACE_SPEED_INFO_PATH);
mockCommandExecutor.addCommand("cat " + PING_RESPONSE);
assertTrue(SpecVerifier.verifySpec(mockCommandExecutor, nodeInfoUrls));
}
@Test
public void verifySpec_unequal_nodeRepoInfo_and_hardware_should_return_false() throws Exception {
nodeInfoUrls.add(new URL(URL_RESOURCE_PATH + "/nodeRepo.json"));
mockCommandExecutor.addCommand("cat " + CPU_INFO_PATH);
mockCommandExecutor.addCommand("cat " + MEMORY_INFO_PATH);
mockCommandExecutor.addCommand("cat " + NON_FAST_DISK_TYPE_INFO_PATH);
mockCommandExecutor.addCommand("cat " + DISK_SIZE_INFO_PATH);
mockCommandExecutor.addCommand("cat " + NET_INTERFACE_INFO_PATH + "NoIpv6");
mockCommandExecutor.addCommand("cat " + NET_INTERFACE_SPEED_INFO_PATH);
mockCommandExecutor.addCommand("cat " + INVALID_PING_RESPONSE);
assertFalse(SpecVerifier.verifySpec(mockCommandExecutor, nodeInfoUrls));
}
@Test
public void makeVerificationSpecReport_should_return_false_interface_speed_and_ipv6_connection() throws Exception {
HardwareInfo actualHardware = new HardwareInfo();
actualHardware.setMinCpuCores(24);
actualHardware.setMinMainMemoryAvailableGb(24);
actualHardware.setInterfaceSpeedMbs(100); //this is wrong
actualHardware.setMinDiskAvailableGb(500);
actualHardware.setIpv4Interface(true);
actualHardware.setIpv6Interface(true);
actualHardware.setIpv6Connection(true);
actualHardware.setDiskType(HardwareInfo.DiskType.SLOW);
nodeInfoUrls.add(new File(NODE_REPO_PATH).toURI().toURL());
NodeRepoJsonModel nodeRepoJsonModel = NodeRepoInfoRetriever.retrieve(nodeInfoUrls);
SpecVerificationReport verificationSpecVerificationReport = SpecVerifier.makeVerificationReport(actualHardware, nodeRepoJsonModel);
String expectedJson = "{\"actualInterfaceSpeed\":100.0}";
ObjectMapper om = new ObjectMapper();
String actualJson = om.writeValueAsString(verificationSpecVerificationReport);
assertEquals(expectedJson, actualJson);
}
@Test
public void getNodeRepositoryJSON_should_return_valid_nodeRepoJSONModel() throws Exception {
nodeInfoUrls.add(new URL(URL_RESOURCE_PATH + "/nodeRepo.json"));
NodeRepoJsonModel actualNodeRepoJsonModel = SpecVerifier.getNodeRepositoryJSON(nodeInfoUrls);
double expectedMinCpuCores = 4D;
double expectedMinMainMemoryAvailableGb = 4.04D;
double expectedMinDiskAvailableGb = 1759.84;
boolean expectedFastDisk = true;
assertEquals(expectedMinCpuCores, actualNodeRepoJsonModel.getMinCpuCores(), DELTA);
assertEquals(expectedMinMainMemoryAvailableGb, actualNodeRepoJsonModel.getMinMainMemoryAvailableGb(), DELTA);
assertEquals(expectedMinDiskAvailableGb, actualNodeRepoJsonModel.getMinDiskAvailableGb(), DELTA);
assertEquals(expectedFastDisk, actualNodeRepoJsonModel.isFastDisk());
}
}
|