aboutsummaryrefslogtreecommitdiffhomepage
path: root/main_test.go
blob: d965f3e59b761e7408441d042905d65680e39c31 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package main

import (
	"bytes"
	"errors"
	"flag"
	"testing"

	"git.gensokyo.uk/security/fortify/command"
)

func TestHelp(t *testing.T) {
	testCases := []struct {
		name string
		args []string
		want string
	}{
		{
			"main", []string{}, `
Usage:	fortify [-h | --help] [-v] [--json] COMMAND [OPTIONS]

Commands:
    app         Launch app defined by the specified config file
    run         Configure and start a permissive default sandbox
    show        Show the contents of an app configuration
    ps          List active apps and their state
    version     Show fortify version
    license     Show full license text
    template    Produce a config template
    help        Show this help message

`,
		},
		{
			"run", []string{"run", "-h"}, `
Usage:	fortify run [-h | --help] [--dbus-config <value>] [--dbus-system <value>] [--mpris] [--dbus-log] [--id <value>] [-a <int>] [-g <value>] [-d <value>] [-u <value>] [--wayland] [-X] [--dbus] [--pulse] COMMAND [OPTIONS]

Flags:
  -X	Share X11 socket and allow connection
  -a int
    	Fortify application ID
  -d string
    	Application home directory (default "os")
  -dbus
    	Proxy D-Bus connection
  -dbus-config string
    	Path to D-Bus proxy config file, or "builtin" for defaults (default "builtin")
  -dbus-log
    	Force logging in the D-Bus proxy
  -dbus-system string
    	Path to system D-Bus proxy config file, or "nil" to disable (default "nil")
  -g value
    	Groups inherited by the app process
  -id string
    	App ID, leave empty to disable security context app_id
  -mpris
    	Allow owning MPRIS D-Bus path, has no effect if custom config is available
  -pulse
    	Share PulseAudio socket and cookie
  -u string
    	Passwd name within sandbox (default "chronos")
  -wayland
    	Allow Wayland connections

`,
		},
	}
	for _, tc := range testCases {
		t.Run(tc.name, func(t *testing.T) {
			out := new(bytes.Buffer)
			c := buildCommand(out)
			if err := c.Parse(tc.args); !errors.Is(err, command.ErrHelp) && !errors.Is(err, flag.ErrHelp) {
				t.Errorf("Parse: error = %v; want %v",
					err, command.ErrHelp)
			}
			if got := out.String(); got != tc.want {
				t.Errorf("Parse: %s want %s", got, tc.want)
			}
		})
	}
}