Skip to content

Commit cc8f9cd

Browse files
committedApr 23, 2024·
tests/network: bring up machines using harness
At the time this test was written, I think `AdditionalNics` was not a test option. So it went down the path of manually bringing up VMs with custom QEMU options. Nowadays, that is an option. So we can improve the logic here by just having the harness bring up the machines for us with the `AdditionalNics` option as required by the test. This also makes the test compatible with `--oscontainer`, which the harness already knows how to apply before running the test.
1 parent 9cbd70a commit cc8f9cd

File tree

1 file changed

+51
-74
lines changed

1 file changed

+51
-74
lines changed
 

‎mantle/kola/tests/misc/network.go

+51-74
Original file line numberDiff line numberDiff line change
@@ -62,14 +62,16 @@ func init() {
6262
// with a slight change, where the script originally run by MCO is run from
6363
// ignition: https://github.com/RHsyseng/rhcos-slb/blob/161a421f8fdcdb4b08fb6366daa8fe1b75cbe095/init-interfaces.sh.
6464
register.RegisterTest(&register.Test{
65-
Run: InitInterfacesTest,
66-
ClusterSize: 0,
67-
Name: "rhcos.network.init-interfaces-test",
68-
Description: "Verify init-interfaces script works in both fresh setup and reboot.",
69-
Timeout: 40 * time.Minute,
70-
Distros: []string{"rhcos"},
71-
Platforms: []string{"qemu"},
72-
Tags: []string{"openshift"},
65+
Run: InitInterfacesTest,
66+
ClusterSize: 1,
67+
Name: "rhcos.network.init-interfaces-test",
68+
Description: "Verify init-interfaces script works in both fresh setup and reboot.",
69+
Timeout: 40 * time.Minute,
70+
Distros: []string{"rhcos"},
71+
Platforms: []string{"qemu"},
72+
Tags: []string{"openshift"},
73+
AdditionalNics: 2,
74+
UserData: userdata,
7375
})
7476
}
7577

@@ -395,6 +397,44 @@ RequiredBy=multi-user.target
395397
`
396398
)
397399

400+
var userdata = conf.Ignition(fmt.Sprintf(`{
401+
"ignition": {
402+
"version": "3.2.0"
403+
},
404+
"storage": {
405+
"files": [
406+
{
407+
"path": "/usr/local/bin/capture-macs",
408+
"contents": { "source": "data:text/plain;base64,%s" },
409+
"mode": 493
410+
},
411+
{
412+
"path": "/var/init-interfaces.sh",
413+
"contents": { "source": "data:text/plain;base64,%s" },
414+
"mode": 493
415+
}
416+
]
417+
},
418+
"systemd": {
419+
"units": [
420+
{
421+
"contents": "%s",
422+
"enabled": true,
423+
"name": "capture-macs.service"
424+
},
425+
{
426+
"contents": "%s",
427+
"enabled": true,
428+
"name": "setup-ovs.service"
429+
}
430+
]
431+
}
432+
}`,
433+
base64.StdEncoding.EncodeToString([]byte(captureMacsScript)),
434+
base64.StdEncoding.EncodeToString([]byte(initInterfacesScript)),
435+
strings.Replace(captureMacsSystemdContents, "\n", "\\n", -1),
436+
strings.Replace(initInterfacesSystemdContents, "\n", "\\n", -1)))
437+
398438
// NetworkAdditionalNics verifies that additional NICs are created on the node
399439
func NetworkAdditionalNics(c cluster.TestCluster) {
400440
primaryMac := "52:55:00:d1:56:00"
@@ -413,8 +453,10 @@ func InitInterfacesTest(c cluster.TestCluster) {
413453
primaryMac := "52:55:00:d1:56:00"
414454
secondaryMac := "52:55:00:d1:56:01"
415455

416-
setupWithInterfacesTest(c, primaryMac, secondaryMac)
417456
m := c.Machines()[0]
457+
// Add karg needed for the ignition to configure the network properly.
458+
addKernelArgs(c, m, []string{fmt.Sprintf("macAddressList=%s,%s", primaryMac, secondaryMac)})
459+
418460
err := simulateNewInstallation(c, m, []string{primaryMac, secondaryMac})
419461
if err != nil {
420462
c.Fatalf("failed to simulate new setup with no connections: %v", err)
@@ -504,71 +546,6 @@ func setupMultipleNetworkTest(c cluster.TestCluster, primaryMac, secondaryMac st
504546
addKernelArgs(c, m, []string{fmt.Sprintf("macAddressList=%s,%s", primaryMac, secondaryMac)})
505547
}
506548

507-
func setupWithInterfacesTest(c cluster.TestCluster, primaryMac, secondaryMac string) {
508-
var userdata = conf.Ignition(fmt.Sprintf(`{
509-
"ignition": {
510-
"version": "3.2.0"
511-
},
512-
"storage": {
513-
"files": [
514-
{
515-
"path": "/usr/local/bin/capture-macs",
516-
"contents": { "source": "data:text/plain;base64,%s" },
517-
"mode": 493
518-
},
519-
{
520-
"path": "/var/init-interfaces.sh",
521-
"contents": { "source": "data:text/plain;base64,%s" },
522-
"mode": 493
523-
}
524-
]
525-
},
526-
"systemd": {
527-
"units": [
528-
{
529-
"contents": "%s",
530-
"enabled": true,
531-
"name": "capture-macs.service"
532-
},
533-
{
534-
"contents": "%s",
535-
"enabled": true,
536-
"name": "setup-ovs.service"
537-
}
538-
]
539-
}
540-
}`,
541-
base64.StdEncoding.EncodeToString([]byte(captureMacsScript)),
542-
base64.StdEncoding.EncodeToString([]byte(initInterfacesScript)),
543-
strings.Replace(captureMacsSystemdContents, "\n", "\\n", -1),
544-
strings.Replace(initInterfacesSystemdContents, "\n", "\\n", -1)))
545-
546-
options := platform.QemuMachineOptions{
547-
MachineOptions: platform.MachineOptions{
548-
AdditionalNics: 2,
549-
},
550-
}
551-
552-
var m platform.Machine
553-
var err error
554-
switch pc := c.Cluster.(type) {
555-
// These cases have to be separated because when put together to the same case statement
556-
// the golang compiler no longer checks that the individual types in the case have the
557-
// NewMachineWithQemuOptions function, but rather whether platform.Cluster
558-
// does which fails
559-
case *qemu.Cluster:
560-
m, err = pc.NewMachineWithQemuOptions(userdata, options)
561-
default:
562-
panic("unreachable")
563-
}
564-
if err != nil {
565-
c.Fatal(err)
566-
}
567-
568-
// Add karg needed for the ignition to configure the network properly.
569-
addKernelArgs(c, m, []string{fmt.Sprintf("macAddressList=%s,%s", primaryMac, secondaryMac)})
570-
}
571-
572549
func simulateNewInstallation(c cluster.TestCluster, m platform.Machine, macConnectionsToDelete []string) error {
573550
macConnectionMap, err := getMacConnectionMap(c, m)
574551
if err != nil {

0 commit comments

Comments
 (0)
Please sign in to comment.