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

Commit cde04ef

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 cde04ef

File tree

3 files changed

+75
-1
lines changed

3 files changed

+75
-1
lines changed
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 %i!; sleep 1; done"
3+
4+
[X-Fleet]
5+
MachineMetadata="ram>=1024"

functional/metadata_test.go

+66
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,68 @@ 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) {
120+
tmpMdOpService := "/tmp/metadata-op.service"
121+
MdOpService := "fixtures/units/metadata-op.service"
122+
MdOpBaseName := path.Base(MdOpService)
123+
124+
stdout, stderr, err = cluster.Fleetctl(m0, "start", MdOpService)
125+
if err != nil {
126+
t.Fatalf("unit %s with metadata operators cannot be started: \nstdout: %s\nstderr: %s\nerr: %v",
127+
MdOpService, stdout, stderr, err)
128+
}
129+
130+
_, err = cluster.WaitForNActiveUnits(m0, 1)
131+
if err != nil {
132+
t.Fatal(err)
133+
}
134+
135+
stdout, stderr, err = cluster.Fleetctl(m0, "stop", MdOpBaseName)
136+
if err != nil {
137+
t.Fatalf("unit %s cannot be stopped: \nstdout: %s\nstderr: %s\nerr: %v",
138+
MdOpBaseName, stdout, stderr, err)
139+
}
140+
141+
_, err = cluster.WaitForNActiveUnits(m0, 0)
142+
if err != nil {
143+
t.Fatal(err)
144+
}
145+
146+
err = util.GenNewFleetService(tmpMdOpService, MdOpService, ramEq, "ram>=1024")
147+
if err != nil {
148+
t.Fatalf("Failed to generate a temp fleet service: %v", err)
149+
}
150+
}
151+
152+
runMetaOp("ram>=1024")
153+
runMetaOp("ram<=1024")
154+
runMetaOp("ram>1023")
155+
runMetaOp("ram<1025")
156+
runMetaOp("ram!=1025")
157+
runMetaOp("ram==1024")
158+
}

functional/util/config.go

+4-1
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)