github.com/hpcng/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  }