| // Copyright 2015 The Vanadium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package main_test |
| |
| import ( |
| "bytes" |
| "fmt" |
| "reflect" |
| "strings" |
| "testing" |
| |
| "v.io/v23/naming" |
| "v.io/v23/services/device" |
| "v.io/x/lib/cmdline" |
| "v.io/x/ref/lib/v23cmd" |
| "v.io/x/ref/test" |
| |
| cmd_device "v.io/x/ref/services/device/device" |
| ) |
| |
| func TestStatusCommand(t *testing.T) { |
| ctx, shutdown := test.V23Init() |
| defer shutdown() |
| tapes := newTapeMap() |
| server, endpoint, err := startServer(t, ctx, tapes) |
| if err != nil { |
| return |
| } |
| defer stopServer(t, server) |
| |
| cmd := cmd_device.CmdRoot |
| globName := naming.JoinAddressName(endpoint.String(), "glob") |
| appName := naming.JoinAddressName(endpoint.String(), "app") |
| |
| rootTape, appTape := tapes.forSuffix(""), tapes.forSuffix("app") |
| for _, c := range []struct { |
| tapeResponse device.Status |
| expected string |
| }{ |
| { |
| installationUninstalled, |
| fmt.Sprintf("Installation %v [State:Uninstalled,Version:director's cut]", appName), |
| }, |
| { |
| instanceUpdating, |
| fmt.Sprintf("Instance %v [State:Updating,Version:theatrical version]", appName), |
| }, |
| { |
| deviceService, |
| fmt.Sprintf("Device Service %v [State:Running,Version:han shot first]", appName), |
| }, |
| } { |
| var stdout, stderr bytes.Buffer |
| env := &cmdline.Env{Stdout: &stdout, Stderr: &stderr} |
| tapes.rewind() |
| rootTape.SetResponses(GlobResponse{[]string{"app"}}) |
| appTape.SetResponses(c.tapeResponse) |
| if err := v23cmd.ParseAndRunForTest(cmd, ctx, env, []string{"status", globName}); err != nil { |
| t.Errorf("%v", err) |
| } |
| if expected, got := c.expected, strings.TrimSpace(stdout.String()); got != expected { |
| t.Errorf("Unexpected output from status. Got %q, expected %q", got, expected) |
| } |
| if got, expected := rootTape.Play(), []interface{}{GlobStimulus{"glob"}}; !reflect.DeepEqual(expected, got) { |
| t.Errorf("invalid call sequence. Got %v, want %v", got, expected) |
| } |
| if got, expected := appTape.Play(), []interface{}{"Status"}; !reflect.DeepEqual(expected, got) { |
| t.Errorf("invalid call sequence. Got %v, want %v", got, expected) |
| } |
| cmd_device.ResetGlobSettings() |
| } |
| } |