github.com/apptainer/singularity@v3.1.1+incompatible/cmd/singularity/help_test.go (about) 1 // Copyright (c) 2018, Sylabs Inc. All rights reserved. 2 // This software is licensed under a 3-clause BSD license. Please consult the 3 // LICENSE.md file distributed with the sources of this project regarding your 4 // rights to use or distribute this software. 5 6 package main 7 8 import ( 9 "os/exec" 10 "strings" 11 "testing" 12 13 "github.com/sylabs/singularity/internal/pkg/test" 14 ) 15 16 func TestHelpSingularity(t *testing.T) { 17 tests := []struct { 18 name string 19 argv []string 20 shouldPass bool 21 }{ 22 {"NoCommand", []string{}, false}, 23 {"FlagShort", []string{"-h"}, true}, 24 {"FlagLong", []string{"--help"}, true}, 25 {"Command", []string{"help"}, true}, 26 } 27 28 for _, tt := range tests { 29 t.Run(tt.name, test.WithoutPrivilege(func(t *testing.T) { 30 cmd := exec.Command(cmdPath, tt.argv...) 31 b, err := cmd.CombinedOutput() 32 if err != nil && tt.shouldPass { 33 t.Log(string(b)) 34 t.Fatalf("unexpected failure running '%v': %v", strings.Join(tt.argv, " "), err) 35 } else if err == nil && !tt.shouldPass { 36 t.Log(string(b)) 37 t.Fatalf("unexpected success running '%v'", strings.Join(tt.argv, " ")) 38 } 39 })) 40 } 41 } 42 43 func TestHelpFailure(t *testing.T) { 44 if !*runDisabled { 45 t.Skip("disabled until issue addressed") // TODO 46 } 47 48 tests := []struct { 49 name string 50 argv []string 51 }{ 52 {"HelpBogus", []string{"help", "bogus"}}, 53 {"BogusHelp", []string{"bogus", "help"}}, 54 {"HelpInstanceBogus", []string{"help", "instance", "bogus"}}, 55 {"ImageBogusHelp", []string{"image", "bogus", "help"}}, 56 } 57 58 for _, tt := range tests { 59 t.Run(tt.name, test.WithoutPrivilege(func(t *testing.T) { 60 cmd := exec.Command(cmdPath, tt.argv...) 61 if b, err := cmd.CombinedOutput(); err == nil { 62 t.Log(string(b)) 63 t.Fatalf("unexpected success running '%v'", strings.Join(tt.argv, " ")) 64 } 65 })) 66 } 67 } 68 69 func TestHelpCommands(t *testing.T) { 70 tests := []struct { 71 name string 72 argv []string 73 }{ 74 {"Apps", []string{"apps"}}, 75 {"Bootstrap", []string{"bootstrap"}}, 76 {"Build", []string{"build"}}, 77 {"Check", []string{"check"}}, 78 {"Create", []string{"create"}}, 79 {"Exec", []string{"exec"}}, 80 {"Inspect", []string{"inspect"}}, 81 {"Mount", []string{"mount"}}, 82 {"Pull", []string{"pull"}}, 83 {"Run", []string{"run"}}, 84 {"Shell", []string{"shell"}}, 85 {"Test", []string{"test"}}, 86 {"InstanceDotStart", []string{"instance.start"}}, 87 {"InstanceDotList", []string{"instance.list"}}, 88 {"InstanceDotStop", []string{"instance.stop"}}, 89 {"InstanceStart", []string{"instance", "start"}}, 90 {"InstanceList", []string{"instance", "list"}}, 91 {"InstanceStop", []string{"instance", "stop"}}, 92 } 93 94 for _, tt := range tests { 95 t.Run(tt.name, test.WithoutPrivilege(func(t *testing.T) { 96 tests := []struct { 97 name string 98 argv []string 99 skip bool 100 }{ 101 {"PostFlagShort", append(tt.argv, "-h"), true}, // TODO 102 {"PostFlagLong", append(tt.argv, "--help"), false}, 103 {"PostCommand", append(tt.argv, "help"), false}, 104 {"PreFlagShort", append([]string{"-h"}, tt.argv...), false}, 105 {"PreFlagLong", append([]string{"--help"}, tt.argv...), false}, 106 {"PreCommand", append([]string{"help"}, tt.argv...), false}, 107 } 108 for _, tt := range tests { 109 if tt.skip && !*runDisabled { 110 t.Skip("disabled until issue addressed") 111 } 112 113 t.Run(tt.name, test.WithoutPrivilege(func(t *testing.T) { 114 cmd := exec.Command(cmdPath, tt.argv...) 115 if b, err := cmd.CombinedOutput(); err != nil { 116 t.Log(string(b)) 117 t.Fatalf("unexpected failure running '%v': %v", strings.Join(tt.argv, " "), err) 118 } 119 })) 120 } 121 })) 122 } 123 }