github.com/mackerelio/mackerel-agent-plugins@v0.89.3/mackerel-plugin-docker/lib/docker_test.go (about) 1 //go:build linux 2 3 package mpdocker 4 5 import ( 6 "testing" 7 8 docker "github.com/fsouza/go-dockerclient" 9 ) 10 11 func TestNormalizeMetricName(t *testing.T) { 12 testSets := [][]string{ 13 {"foo/bar", "foo_bar"}, 14 {"foo:bar", "foo_bar"}, 15 } 16 17 for _, testSet := range testSets { 18 if normalizeMetricName(testSet[0]) != testSet[1] { 19 t.Errorf("normalizeMetricName: '%s' should be normalized to '%s', but '%s'", testSet[0], testSet[1], normalizeMetricName(testSet[0])) 20 } 21 } 22 } 23 24 func TestGraphDefinition(t *testing.T) { 25 var docker DockerPlugin 26 27 graphdef := docker.GraphDefinition() 28 if len(graphdef) != 6 { 29 t.Errorf("GraphDefinition: %d should be 6", len(graphdef)) 30 } 31 } 32 33 func TestGenerateName(t *testing.T) { 34 stub := docker.APIContainers{ 35 ID: "bab2b03c736de41ecba6470eba736c5109436f706eedca4f3e0d93d6530eccd4", 36 Image: "tutum/mongodb", 37 Command: "/run.sh", 38 Created: 1456995574, 39 Status: "Up 4 days", 40 Ports: []docker.APIPort{ 41 {PrivatePort: 28017, Type: "tcp"}, 42 {PrivatePort: 27017, Type: "tcp"}, 43 }, 44 Names: []string{"/my-mongodb"}, 45 Labels: map[string]string{"foo": "bar"}, 46 } 47 /* {"Id":"5b963f266d609d2b02aee8f57d664e04d35aa8c23afcbc6bb73bc4a5b2e7c44d", 48 "Image":"memcached", 49 "Command":"/entrypoint.sh memcached", 50 "Created":1456994862, 51 "Status":"Up 4 days", 52 "Ports":[{"PrivatePort":11211, 53 "Type":"tcp"}], 54 "Names":["/my-memcache"]}]` 55 */ 56 var docker DockerPlugin 57 docker.NameFormat = "name_id" 58 if docker.generateName(stub) != "my-mongodb_bab2b0" { 59 t.Errorf("generateName(name): %s should be 'my-mongodb_bab2b0'", docker.generateName(stub)) 60 } 61 docker.NameFormat = "name" 62 if docker.generateName(stub) != "my-mongodb" { 63 t.Errorf("generateName(name): %s should be 'my-mongodb'", docker.generateName(stub)) 64 } 65 docker.NameFormat = "id" 66 if docker.generateName(stub) != "bab2b03c736de41ecba6470eba736c5109436f706eedca4f3e0d93d6530eccd4" { 67 t.Errorf("generateName(name): %s should be 'bab2b03c736de41ecba6470eba736c5109436f706eedca4f3e0d93d6530eccd4'", docker.generateName(stub)) 68 } 69 docker.NameFormat = "image" 70 if docker.generateName(stub) != "tutum/mongodb" { 71 t.Errorf("generateName(name): %s should be 'tutum/mongodb'", docker.generateName(stub)) 72 } 73 docker.NameFormat = "image_id" 74 if docker.generateName(stub) != "tutum/mongodb_bab2b0" { 75 t.Errorf("generateName(name): %s should be 'tutum/mongodb_bab2b0'", docker.generateName(stub)) 76 } 77 docker.NameFormat = "image_name" 78 if docker.generateName(stub) != "tutum/mongodb_my-mongodb" { 79 t.Errorf("generateName(name): %s should be 'tutum/mongodb_my-mongodb'", docker.generateName(stub)) 80 } 81 docker.NameFormat = "label" 82 docker.Label = "foo" 83 if docker.generateName(stub) != "bar" { 84 t.Errorf("generateName(name): %s should be 'bar'", docker.generateName(stub)) 85 } 86 87 } 88 89 func TestAddCPUPercentageStats(t *testing.T) { 90 stats := map[string]interface{}{ 91 "docker._internal.cpuacct.containerA.user": uint64(3000), 92 "docker._internal.cpuacct.containerA.system": uint64(2000), 93 "docker._internal.cpuacct.containerA.host": uint64(100000), 94 "docker._internal.cpuacct.containerA.onlineCPUs": int(2), 95 "docker._internal.cpuacct.containerB.host": uint64(100000), 96 "docker._internal.cpuacct.containerB.user": uint64(3500), 97 "docker._internal.cpuacct.containerC.user": uint64(3300), 98 "docker._internal.cpuacct.containerC.system": uint64(2300), 99 "docker._internal.cpuacct.containerD.host": uint64(100000), 100 "docker._internal.cpuacct.containerD.user": uint64(3000), 101 "docker._internal.cpuacct.containerD.system": uint64(2000), 102 "docker._internal.cpuacct.containerF.user": uint64(3000), // it has been reset 103 "docker._internal.cpuacct.containerF.system": uint64(1000), // it has been reset 104 "docker._internal.cpuacct.containerF.host": uint64(100000100000), 105 "docker._internal.cpuacct.containerF.onlineCPUs": int(2), 106 } 107 oldStats := map[string]interface{}{ 108 "docker._internal.cpuacct.containerA.host": float64(90000), 109 "docker._internal.cpuacct.containerA.user": float64(1000), 110 "docker._internal.cpuacct.containerA.system": float64(1500), 111 "docker._internal.cpuacct.containerB.host": float64(90000), 112 "docker._internal.cpuacct.containerB.user": float64(3000), 113 "docker._internal.cpuacct.containerC.user": float64(3000), 114 "docker._internal.cpuacct.containerC.system": float64(2000), 115 "docker._internal.cpuacct.containerE.host": float64(100000), 116 "docker._internal.cpuacct.containerE.user": float64(3000), 117 "docker._internal.cpuacct.containerE.system": float64(2000), 118 "docker._internal.cpuacct.containerF.user": float64(40000000000), 119 "docker._internal.cpuacct.containerF.system": float64(20000000000), 120 "docker._internal.cpuacct.containerF.host": float64(100000000000), 121 } 122 addCPUPercentageStats(&stats, oldStats) 123 124 if stat, ok := stats["docker.cpuacct_percentage.containerA.user"]; !ok { 125 t.Errorf("docker.cpuacct_percentage.containerA.user should be calculated") 126 } else if stat != float64(40.0) { 127 t.Errorf("docker.cpuacct_percentage.containerA.user should be %f, but %f", float64(40.0), stat) 128 } 129 130 if _, ok := stats["docker.cpuacct_percentage.containerC.user"]; ok { 131 t.Errorf("docker.cpuacct_percentage.containerC.user should not be calculated") 132 } 133 134 if _, ok := stats["docker.cpuacct_percentage.containerB.user"]; ok { 135 t.Errorf("docker.cpuacct_percentage.containerB.user should not be calculated") 136 } 137 138 if _, ok := stats["docker.cpuacct_percentage.containerD.user"]; ok { 139 t.Errorf("docker.cpuacct_percentage.containerD.user should not be calculated") 140 } 141 142 if _, ok := stats["docker.cpuacct_percentage.containerE.user"]; ok { 143 t.Errorf("docker.cpuacct_percentage.containerE.user should not be calculated") 144 } 145 146 if stat, ok := stats["docker.cpuacct_percentage.containerF.user"]; !ok { 147 t.Errorf("docker.cpuacct_percentage.containerF.user should be calculated") 148 } else if stat != float64(6.0) { 149 t.Errorf("docker.cpuacct_percentage.containerF.user should be %f, but %f", float64(6.0), stat) 150 } 151 }