@@ -37,57 +37,57 @@ func autoConfig() config.Config {
3737 return config.Config {Values : map [string ]string {KeyBackend : BackendAuto }}
3838}
3939
40- func TestSelectAutoPrefersTheActiveBackend (t * testing.T ) {
40+ func TestResolveAutoPrefersTheActiveBackend (t * testing.T ) {
4141 // firewalld installed and running, ufw installed but stopped: the running
4242 // one wins even though ufw comes first in the preference order.
4343 stubProbes (t ,
4444 probeState {installed : true },
4545 probeState {installed : true , active : true , enabled : true })
4646
47- backend , err := Select (autoConfig ())
47+ name , err := Resolve (autoConfig ())
4848 if err != nil {
49- t .Fatalf ("Select : %v" , err )
49+ t .Fatalf ("Resolve : %v" , err )
5050 }
51- if backend . Name () != BackendFirewalld {
52- t .Errorf ("Name = %q, want firewalld" , backend . Name () )
51+ if name != BackendFirewalld {
52+ t .Errorf ("Resolve = %q, want firewalld" , name )
5353 }
5454}
5555
56- func TestSelectAutoPrefersTheEnabledUnit (t * testing.T ) {
56+ func TestResolveAutoPrefersTheEnabledUnit (t * testing.T ) {
5757 // Both installed, neither running: the one systemd would start at boot is
5858 // the one this machine is configured to use, even though ufw is first in
5959 // the preference order.
6060 stubProbes (t ,
6161 probeState {installed : true },
6262 probeState {installed : true , enabled : true })
6363
64- backend , err := Select (autoConfig ())
64+ name , err := Resolve (autoConfig ())
6565 if err != nil {
66- t .Fatalf ("Select : %v" , err )
66+ t .Fatalf ("Resolve : %v" , err )
6767 }
68- if backend . Name () != BackendFirewalld {
69- t .Errorf ("Name = %q, want firewalld" , backend . Name () )
68+ if name != BackendFirewalld {
69+ t .Errorf ("Resolve = %q, want firewalld" , name )
7070 }
7171}
7272
73- func TestSelectAutoFallsBackToInstalled (t * testing.T ) {
73+ func TestResolveAutoFallsBackToInstalled (t * testing.T ) {
7474 // Nothing is running and nothing is enabled: the first installed backend
7575 // is used so the user can look at it.
7676 stubProbes (t , probeState {}, probeState {installed : true })
7777
78- backend , err := Select (autoConfig ())
78+ name , err := Resolve (autoConfig ())
7979 if err != nil {
80- t .Fatalf ("Select : %v" , err )
80+ t .Fatalf ("Resolve : %v" , err )
8181 }
82- if backend . Name () != BackendFirewalld {
83- t .Errorf ("Name = %q, want firewalld" , backend . Name () )
82+ if name != BackendFirewalld {
83+ t .Errorf ("Resolve = %q, want firewalld" , name )
8484 }
8585}
8686
87- func TestSelectAutoWithoutAnyFirewall (t * testing.T ) {
87+ func TestResolveAutoWithoutAnyFirewall (t * testing.T ) {
8888 stubProbes (t , probeState {}, probeState {})
8989
90- _ , err := Select (autoConfig ())
90+ _ , err := Resolve (autoConfig ())
9191 if err == nil {
9292 t .Fatal ("expected an error when no firewall is installed" )
9393 }
@@ -98,14 +98,45 @@ func TestSelectAutoWithoutAnyFirewall(t *testing.T) {
9898 }
9999}
100100
101- func TestSelectUnknownBackend (t * testing.T ) {
102- if _ , err := Select (config.Config {
101+ func TestResolveUnknownBackend (t * testing.T ) {
102+ if _ , err := Resolve (config.Config {
103103 Values : map [string ]string {KeyBackend : "iptables" },
104104 }); err == nil {
105105 t .Error ("expected an error for an unknown backend" )
106106 }
107107}
108108
109+ func TestResolveHonoursAnExplicitChoice (t * testing.T ) {
110+ // An explicit choice skips detection entirely: the user said which
111+ // firewall this machine runs, and the tool does not argue.
112+ stubProbes (t , probeState {installed : true , active : true }, probeState {})
113+ name , err := Resolve (config.Config {
114+ Values : map [string ]string {KeyBackend : BackendFirewalld },
115+ })
116+ if err != nil {
117+ t .Fatalf ("Resolve: %v" , err )
118+ }
119+ if name != BackendFirewalld {
120+ t .Errorf ("Resolve = %q, want firewalld" , name )
121+ }
122+ }
123+
124+ func TestSelectBuildsTheResolvedBackend (t * testing.T ) {
125+ // Select reaches for the binary, which a test machine may not have; what
126+ // matters either way is that it reports the backend Resolve named, and
127+ // says so legibly when that binary is missing.
128+ stubProbes (t , probeState {installed : true , active : true }, probeState {})
129+ backend , err := Select (autoConfig ())
130+ switch {
131+ case err != nil :
132+ if ! strings .Contains (err .Error (), "ufw" ) {
133+ t .Errorf ("error should name the backend it could not build: %v" , err )
134+ }
135+ case backend .Name () != BackendUFW :
136+ t .Errorf ("Name = %q, want ufw" , backend .Name ())
137+ }
138+ }
139+
109140func TestInspectReportsEveryBackend (t * testing.T ) {
110141 // The detector must describe the backend it did not pick, so `--check`
111142 // can say "firewalld is here but stopped" instead of staying silent.
0 commit comments