Skip to content
This repository was archived by the owner on Jan 30, 2020. It is now read-only.

Commit 68028c7

Browse files
author
Dongsu Park
committed
functional: introduce a test TestMetadataOperator
TestMetadataOperator ensures that metadata operators work also for extended operators such as ">=", "<=", "<", ">", "!=", or "==". First make the test machine have "ram=1024" in its machine metadata. Then in TestMetadataOperator, check each possible operator one after another, to make sure that each works without error.
1 parent 05eba5b commit 68028c7

File tree

3 files changed

+94
-1
lines changed

3 files changed

+94
-1
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
[Service]
2+
ExecStart=/bin/bash -c "while true; do echo Hello, World!; sleep 1; done"
3+
4+
[X-Fleet]
5+
MachineMetadata="ram>=1024"

functional/metadata_test.go

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ package functional
1616

1717
import (
1818
"fmt"
19+
"path"
1920
"regexp"
2021
"strings"
2122
"testing"
@@ -90,3 +91,87 @@ func TestTemplatesWithSpecifiersInMetadata(t *testing.T) {
9091
t.Fatalf("metadata@invalid unit should not be scheduled: \nstdout: %s\nstderr: %s", stdout, stderr)
9192
}
9293
}
94+
95+
// TestMetadataOperator ensures that metadata operators work also for
96+
// extended operators such as ">=", "<=", "<", ">", "!=", or "==".
97+
func TestMetadataOperator(t *testing.T) {
98+
cluster, err := platform.NewNspawnCluster("smoke")
99+
if err != nil {
100+
t.Fatal(err)
101+
}
102+
defer cluster.Destroy(t)
103+
104+
members, err := platform.CreateNClusterMembers(cluster, 1)
105+
if err != nil {
106+
t.Fatal(err)
107+
}
108+
m0 := members[0]
109+
_, err = cluster.WaitForNMachines(m0, 1)
110+
if err != nil {
111+
t.Fatal(err)
112+
}
113+
114+
stdout, stderr, err := cluster.Fleetctl(m0, "list-machines", "--fields", "machine,metadata")
115+
if err != nil {
116+
t.Fatalf("Unable to get machine metadata\nstdout: %s\nstderr: %s\nerr: %v", stdout, stderr, err)
117+
}
118+
119+
runMetaOp := func(ramEq string, expectSuccess bool) {
120+
tmpMdOpService := "/tmp/metadata-op.service"
121+
MdOpService := "fixtures/units/metadata-op.service"
122+
MdOpBaseName := path.Base(MdOpService)
123+
var nUnits int
124+
125+
if expectSuccess {
126+
t.Logf("Testing %s expecting success...", ramEq)
127+
nUnits = 1
128+
} else {
129+
t.Logf("Testing %s expecting failure...", ramEq)
130+
nUnits = 0
131+
}
132+
133+
err = util.GenNewFleetService(tmpMdOpService, MdOpService, ramEq, "ram>=1024")
134+
if err != nil {
135+
t.Fatalf("Failed to generate a temp fleet service: %v", err)
136+
}
137+
138+
stdout, stderr, err = cluster.Fleetctl(m0, "start", "--no-block", tmpMdOpService)
139+
if err != nil {
140+
t.Fatalf("starting unit %s returned error:\nstdout: %s\nstderr: %s\nerr: %v",
141+
tmpMdOpService, stdout, stderr, err)
142+
}
143+
144+
_, err = cluster.WaitForNActiveUnits(m0, nUnits)
145+
if err != nil {
146+
t.Fatal(err)
147+
}
148+
149+
stdout, stderr, err = cluster.Fleetctl(m0, "destroy", MdOpBaseName)
150+
if err != nil {
151+
t.Fatalf("unit %s cannot be stopped: \nstdout: %s\nstderr: %s\nerr: %v",
152+
MdOpBaseName, stdout, stderr, err)
153+
}
154+
155+
_, err = cluster.WaitForNUnitFiles(m0, 0)
156+
if err != nil {
157+
t.Fatal(err)
158+
}
159+
160+
}
161+
162+
// run tests for success cases
163+
runMetaOp("ram>=1024", true)
164+
runMetaOp("ram<=1024", true)
165+
runMetaOp("ram>1023", true)
166+
runMetaOp("ram<1025", true)
167+
runMetaOp("ram!=1025", true)
168+
runMetaOp("ram==1024", true)
169+
170+
// run tests for failure cases
171+
runMetaOp("ram>=1025", false)
172+
runMetaOp("ram<=1023", false)
173+
runMetaOp("ram>1024", false)
174+
runMetaOp("ram<1024", false)
175+
runMetaOp("ram!=1024", false)
176+
runMetaOp("ram==1025", false)
177+
}

functional/util/config.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626

2727
const (
2828
fleetAPIPort = 54728
29+
fleetRAM = 1024 // in MiB
2930
FleetTTL = "3s"
3031
cloudConfig = `#cloud-config
3132
@@ -62,7 +63,7 @@ coreos:
6263
command: start
6364
content: |
6465
[Service]
65-
Environment=FLEET_METADATA=hostname=%H
66+
Environment=FLEET_METADATA=hostname=%H,ram={{printf "%d" .FleetRAM}}
6667
ExecStart=/opt/fleet/fleetd -config /opt/fleet/fleet.conf
6768
`
6869
)
@@ -80,6 +81,7 @@ type configValues struct {
8081
EtcdEndpoint string
8182
EtcdKeyPrefix string
8283
FleetAPIPort int
84+
FleetRAM int
8385
FleetAgentTTL string
8486
FleetExtra string
8587
}
@@ -118,6 +120,7 @@ func BuildCloudConfig(dst io.Writer, ip, etcdEndpoint, etcdKeyPrefix string) err
118120
EtcdEndpoint: etcdEndpoint,
119121
EtcdKeyPrefix: etcdKeyPrefix,
120122
FleetAPIPort: fleetAPIPort,
123+
FleetRAM: fleetRAM,
121124
FleetAgentTTL: FleetTTL,
122125
FleetExtra: os.Getenv("FLEETD_TEST_ENV"),
123126
}

0 commit comments

Comments
 (0)