github.com/u-root/u-root@v7.0.1-0.20200915234505-ad7babab0a8e+incompatible/pkg/cmdline/cmdline_test.go (about) 1 // Copyright 2018 the u-root Authors. All rights reserved 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package cmdline 6 7 import ( 8 "strings" 9 "testing" 10 ) 11 12 func TestCmdline(t *testing.T) { 13 14 exampleCmdLine := `BOOT_IMAGE=/vmlinuz-4.11.2 ro ` + 15 `test-flag test2-flag=8 ` + 16 `uroot.initflags="systemd test-flag=3 test2-flag runlevel=2" ` + 17 `root=LABEL=/ biosdevname=0 net.ifnames=0 fsck.repair=yes ` + 18 `ipv6.autoconf=0 erst_disable nox2apic crashkernel=128M ` + 19 `systemd.unified_cgroup_hierarchy=1 cgroup_no_v1=all console=tty0 ` + 20 `console=ttyS0,115200 security=selinux selinux=1 enforcing=0` 21 22 exampleCmdLineNoInitFlags := `BOOT_IMAGE=/vmlinuz-4.11.2 ro ` + 23 `root=LABEL=/ biosdevname=0 net.ifnames=0 fsck.repair=yes ` + 24 `console=ttyS0,115200 security=selinux selinux=1 enforcing=0` 25 26 // Do this once, we'll over-write soon 27 once.Do(cmdLineOpener) 28 cmdLineReader := strings.NewReader(exampleCmdLine) 29 procCmdLine = parse(cmdLineReader) 30 31 if procCmdLine.Err != nil { 32 t.Errorf("procCmdLine threw an error: %v", procCmdLine.Err) 33 } 34 35 wantLen := len(exampleCmdLine) 36 if len(procCmdLine.Raw) != wantLen { 37 t.Errorf("procCmdLine.Raw wrong length: %v != %d", 38 len(procCmdLine.Raw), wantLen) 39 } 40 41 if len(FullCmdLine()) != wantLen { 42 t.Errorf("FullCmdLine() returned wrong length: %v != %d", 43 len(FullCmdLine()), wantLen) 44 } 45 46 if len(procCmdLine.AsMap) != 21 { 47 t.Errorf("procCmdLine.AsMap wrong length: %v != 21", 48 len(procCmdLine.AsMap)) 49 } 50 51 if ContainsFlag("biosdevname") == false { 52 t.Error("couldn't find biosdevname in kernel flags") 53 } 54 55 if ContainsFlag("biosname") == true { 56 t.Error("could find biosname in kernel flags, but shouldn't") 57 } 58 59 if security, present := Flag("security"); !present || security != "selinux" { 60 t.Errorf("Flag 'security' is %v instead of 'selinux'", security) 61 } 62 63 initFlagMap := GetInitFlagMap() 64 if testflag, present := initFlagMap["test-flag"]; !present || testflag != "3" { 65 t.Errorf("init test-flag == %v instead of test-flag == 3\nMAP: %v", testflag, initFlagMap) 66 } 67 68 cmdLineReader = strings.NewReader(exampleCmdLineNoInitFlags) 69 procCmdLine = parse(cmdLineReader) 70 if initFlagMap = GetInitFlagMap(); len(initFlagMap) != 0 { 71 t.Errorf("initFlagMap should be empty, is actually %v", initFlagMap) 72 } 73 74 } 75 76 func TestCmdlineModules(t *testing.T) { 77 exampleCmdlineModules := `BOOT_IMAGE=/vmlinuz-4.11.2 ro ` + 78 `my_module.flag1=8 my-module.flag2-string=hello ` + 79 `otherMod.opt1=world otherMod.opt_2=22-22` 80 81 once.Do(cmdLineOpener) 82 cmdLineReader := strings.NewReader(exampleCmdlineModules) 83 procCmdLine = parse(cmdLineReader) 84 85 if procCmdLine.Err != nil { 86 t.Errorf("procCmdLine threw an error: %v", procCmdLine.Err) 87 } 88 89 // Check flags using contains to not rely on map iteration order 90 flags := FlagsForModule("my-module") 91 if !strings.Contains(flags, "flag1=8 ") || !strings.Contains(flags, "flag2_string=hello ") { 92 t.Errorf("my-module flags got: %v, want flag1=8 flag2_string=hello ", flags) 93 } 94 flags = FlagsForModule("my_module") 95 if !strings.Contains(flags, "flag1=8 ") || !strings.Contains(flags, "flag2_string=hello ") { 96 t.Errorf("my_module flags got: %v, want flag1=8 flag2_string=hello ", flags) 97 } 98 99 flags = FlagsForModule("otherMod") 100 if !strings.Contains(flags, "opt1=world ") || !strings.Contains(flags, "opt_2=22-22 ") { 101 t.Errorf("my_module flags got: %v, want opt1=world opt_2=22-22 ", flags) 102 } 103 }