Skip to content

Commit f93b5ab

Browse files
committed
add init functional test case
1 parent 30dedee commit f93b5ab

File tree

2 files changed

+208
-0
lines changed

2 files changed

+208
-0
lines changed

test/e2e/setup_test.go

Lines changed: 186 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,186 @@
1+
package e2e
2+
3+
import (
4+
"encoding/json"
5+
"fmt"
6+
"os"
7+
"os/exec"
8+
"path/filepath"
9+
"strings"
10+
11+
"github.com/crc-org/macadam/test/osprovider"
12+
. "github.com/onsi/ginkgo/v2"
13+
. "github.com/onsi/gomega"
14+
"github.com/onsi/gomega/gexec"
15+
)
16+
17+
var tempDir string
18+
var machineResponses []ListReporter
19+
var err error
20+
var image string
21+
var keypath string
22+
var cloudinitPath string
23+
24+
var _ = BeforeSuite(func() {
25+
tempDir, err = os.MkdirTemp("", "test-")
26+
Expect(err).NotTo(HaveOccurred())
27+
28+
// download CentOS image
29+
centosProvider := osprovider.NewCentosProvider()
30+
image, err = centosProvider.Fetch(tempDir)
31+
Expect(err).NotTo(HaveOccurred())
32+
33+
keypath = filepath.Join(tempDir, "id_rsa")
34+
cloudinitPath = filepath.Join(tempDir, "user-data")
35+
//generate ssh key
36+
cmd := exec.Command("ssh-keygen", "-t", "rsa", "-f", keypath, "-N", "")
37+
err = cmd.Run()
38+
Expect(err).ShouldNot(HaveOccurred())
39+
//copy user-data
40+
wd, err := os.Getwd()
41+
Expect(err).ShouldNot(HaveOccurred())
42+
cloudinit := wd + "/../testdata/user-data"
43+
content, err := os.ReadFile(cloudinit)
44+
Expect(err).ShouldNot(HaveOccurred())
45+
//replace ssh pub key to user-data file
46+
pubkeypath := keypath+".pub"
47+
pubkey, err := os.ReadFile(pubkeypath)
48+
Expect(err).ShouldNot(HaveOccurred())
49+
newContent := strings.ReplaceAll(string(content), "[sshkey]", string(pubkey))
50+
err = os.WriteFile(cloudinitPath, []byte(newContent), 0644)
51+
Expect(err).ShouldNot(HaveOccurred())
52+
})
53+
54+
var _ = AfterSuite(func() {
55+
os.RemoveAll(tempDir)
56+
})
57+
58+
var _ = Describe("Macadam init setup test", Label("init"), func() {
59+
BeforeEach(func() {
60+
session := macadamTest.Macadam([]string{"list", "--format", "json"})
61+
session.WaitWithDefaultTimeout()
62+
Expect(session).Should(gexec.Exit(0))
63+
err := json.Unmarshal(session.Out.Contents(), &machineResponses)
64+
Expect(err).NotTo(HaveOccurred())
65+
Expect(len(machineResponses)).Should(Equal(0))
66+
})
67+
68+
AfterEach(func() {
69+
// stop the CentOS VM
70+
session := macadamTest.Macadam([]string{"stop"})
71+
session.WaitWithDefaultTimeout()
72+
Expect(session).Should(gexec.Exit(0))
73+
Expect(session.OutputToString()).Should(ContainSubstring("stopped successfully"))
74+
75+
// rm the CentOS VM and verify that "list" does not return any vm
76+
session = macadamTest.Macadam([]string{"rm", "-f"})
77+
session.WaitWithDefaultTimeout()
78+
Expect(session).Should(gexec.Exit(0))
79+
80+
session = macadamTest.Macadam([]string{"list", "--format", "json"})
81+
session.WaitWithDefaultTimeout()
82+
Expect(session).Should(gexec.Exit(0))
83+
err = json.Unmarshal(session.Out.Contents(), &machineResponses)
84+
Expect(err).NotTo(HaveOccurred())
85+
Expect(len(machineResponses)).Should(Equal(0))
86+
})
87+
88+
It("init CentOS VM with cpu, disk and memory setup", Label("cpu"), func() {
89+
// init a CentOS VM with cpu and disk-size setup
90+
session := macadamTest.Macadam([]string{"init", "--cpus", "3", "--disk-size", "30", "--memory", "2048", image})
91+
session.WaitWithDefaultTimeout()
92+
Expect(session).Should(gexec.Exit(0))
93+
94+
// check the list command returns one item
95+
session = macadamTest.Macadam([]string{"list", "--format", "json"})
96+
session.WaitWithDefaultTimeout()
97+
Expect(session).Should(gexec.Exit(0))
98+
err = json.Unmarshal(session.Out.Contents(), &machineResponses)
99+
Expect(err).NotTo(HaveOccurred())
100+
Expect(len(machineResponses)).Should(Equal(1))
101+
102+
// start the CentOS VM
103+
session = macadamTest.Macadam([]string{"start"})
104+
session.WaitWithDefaultTimeout()
105+
Expect(session).Should(gexec.Exit(0))
106+
Expect(session.OutputToString()).Should(ContainSubstring("started successfully"))
107+
108+
// ssh into the VM and prints user
109+
session = macadamTest.Macadam([]string{"ssh", "nproc"})
110+
session.WaitWithDefaultTimeout()
111+
Expect(session).Should(gexec.Exit(0))
112+
Expect(session.OutputToString()).Should(Equal("3"))
113+
114+
session = macadamTest.Macadam([]string{"ssh", "lsblk"})
115+
session.WaitWithDefaultTimeout()
116+
Expect(session).Should(gexec.Exit(0))
117+
Expect(session.OutputToString()).Should(ContainSubstring("30G"))
118+
119+
session = macadamTest.Macadam([]string{"ssh", "free", "-h"})
120+
session.WaitWithDefaultTimeout()
121+
Expect(session).Should(gexec.Exit(0))
122+
fmt.Println(session.OutputToString())
123+
Expect(session.OutputToString()).Should(ContainSubstring("1.7"))
124+
})
125+
126+
It("init CentOS VM with username and sshkey setup", Label("sshkey"), func() {
127+
// init a CentOS VM with cpu and disk-size setup
128+
session := macadamTest.Macadam([]string{"init", "--username", "test", "--ssh-identity-path", keypath, image})
129+
session.WaitWithDefaultTimeout()
130+
Expect(session).Should(gexec.Exit(0))
131+
132+
// check the list command returns one item
133+
session = macadamTest.Macadam([]string{"list", "--format", "json"})
134+
session.WaitWithDefaultTimeout()
135+
Expect(session).Should(gexec.Exit(0))
136+
err = json.Unmarshal(session.Out.Contents(), &machineResponses)
137+
Expect(err).NotTo(HaveOccurred())
138+
Expect(len(machineResponses)).Should(Equal(1))
139+
140+
// start the CentOS VM
141+
session = macadamTest.Macadam([]string{"start"})
142+
session.WaitWithDefaultTimeout()
143+
Expect(session).Should(gexec.Exit(0))
144+
Expect(session.OutputToString()).Should(ContainSubstring("started successfully"))
145+
146+
// ssh into the VM and prints user
147+
session = macadamTest.Macadam([]string{"ssh", "--username", "test", "whoami"})
148+
session.WaitWithDefaultTimeout()
149+
Expect(session).Should(gexec.Exit(0))
150+
Expect(session.OutputToString()).Should(Equal("test"))
151+
})
152+
153+
It("init CentOS VM with cloud-init setup", Label("cloudinit"), func() {
154+
// init a CentOS VM with cpu and disk-size setup
155+
session := macadamTest.Macadam([]string{"init", "--cloud-init", cloudinitPath, "--username", "macadamtest", "--ssh-identity-path", keypath, image})
156+
session.WaitWithDefaultTimeout()
157+
Expect(session).Should(gexec.Exit(0))
158+
159+
// check the list command returns one item
160+
session = macadamTest.Macadam([]string{"list", "--format", "json"})
161+
session.WaitWithDefaultTimeout()
162+
Expect(session).Should(gexec.Exit(0))
163+
err = json.Unmarshal(session.Out.Contents(), &machineResponses)
164+
Expect(err).NotTo(HaveOccurred())
165+
Expect(len(machineResponses)).Should(Equal(1))
166+
167+
// start the CentOS VM
168+
session = macadamTest.Macadam([]string{"start"})
169+
session.WaitWithDefaultTimeout()
170+
Expect(session).Should(gexec.Exit(0))
171+
Expect(session.OutputToString()).Should(ContainSubstring("started successfully"))
172+
173+
// ssh into the VM and prints user
174+
session = macadamTest.Macadam([]string{"ssh", "whoami"})
175+
session.WaitWithDefaultTimeout()
176+
Expect(session).Should(gexec.Exit(0))
177+
Expect(session.OutputToString()).Should(Equal("macadamtest"))
178+
179+
// ssh into the VM and check installed app
180+
session = macadamTest.Macadam([]string{"ssh", "git", "--version"})
181+
session.WaitWithDefaultTimeout()
182+
Expect(session).Should(gexec.Exit(0))
183+
Expect(session.OutputToString()).Should(ContainSubstring("git version"))
184+
})
185+
186+
})

test/testdata/user-data

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#cloud-config
2+
hostname: macadam-test
3+
package_update: true
4+
package_upgrade: true
5+
6+
packages:
7+
- git
8+
- vim
9+
10+
users:
11+
- name: macadamtest
12+
ssh-authorized-keys:
13+
- [sshkey]
14+
sudo: ALL=(ALL) NOPASSWD:ALL
15+
shell: /bin/bash
16+
17+
chpasswd:
18+
list: |
19+
macadamtest:macadamtest
20+
expire: false
21+
22+
ssh_pwauth: true

0 commit comments

Comments
 (0)