github.com/hernad/nomad@v1.6.112/command/quota_status_test.go (about) 1 // Copyright (c) HashiCorp, Inc. 2 // SPDX-License-Identifier: MPL-2.0 3 4 //go:build ent 5 // +build ent 6 7 package command 8 9 import ( 10 "encoding/json" 11 "testing" 12 13 "github.com/hernad/nomad/api" 14 "github.com/hernad/nomad/ci" 15 "github.com/mitchellh/cli" 16 "github.com/posener/complete" 17 "github.com/shoenig/test/must" 18 ) 19 20 func TestQuotaStatusCommand_Implements(t *testing.T) { 21 ci.Parallel(t) 22 var _ cli.Command = &QuotaStatusCommand{} 23 } 24 25 func TestQuotaStatusCommand_Fails(t *testing.T) { 26 ci.Parallel(t) 27 ui := cli.NewMockUi() 28 cmd := &QuotaStatusCommand{Meta: Meta{Ui: ui}} 29 30 // Fails on misuse 31 code := cmd.Run([]string{"some", "bad", "args"}) 32 must.One(t, code) 33 34 out := ui.ErrorWriter.String() 35 must.StrContains(t, out, commandErrorText(cmd)) 36 ui.ErrorWriter.Reset() 37 38 code = cmd.Run([]string{"-address=nope", "foo"}) 39 must.One(t, code) 40 41 out = ui.ErrorWriter.String() 42 must.StrContains(t, out, "retrieving quota") 43 44 ui.ErrorWriter.Reset() 45 } 46 47 func TestQuotaStatusCommand_Run(t *testing.T) { 48 ci.Parallel(t) 49 50 // Create a server 51 srv, client, url := testServer(t, true, nil) 52 defer srv.Shutdown() 53 54 ui := cli.NewMockUi() 55 cmd := &QuotaStatusCommand{Meta: Meta{Ui: ui}} 56 57 // Create a quota to delete 58 qs := testQuotaSpec() 59 _, err := client.Quotas().Register(qs, nil) 60 must.NoError(t, err) 61 62 // Delete a namespace 63 code := cmd.Run([]string{"-address=" + url, qs.Name}) 64 must.Zero(t, code) 65 66 // Check for basic spec 67 out := ui.OutputWriter.String() 68 must.StrContains(t, out, "= quota-test-") 69 70 // Check for usage 71 must.StrContains(t, out, "0 / 100") 72 73 ui.OutputWriter.Reset() 74 75 // List json 76 code = cmd.Run([]string{"-address=" + url, "-json", qs.Name}) 77 must.Zero(t, code) 78 79 outJson := api.QuotaSpec{} 80 err = json.Unmarshal(ui.OutputWriter.Bytes(), &outJson) 81 must.NoError(t, err) 82 83 ui.OutputWriter.Reset() 84 85 // Go template to format the output 86 code = cmd.Run([]string{"-address=" + url, "-t", "{{ .Name }}", qs.Name}) 87 must.Zero(t, code) 88 89 out = ui.OutputWriter.String() 90 must.StrContains(t, out, "test") 91 92 ui.OutputWriter.Reset() 93 } 94 95 func TestQuotaStatusCommand_AutocompleteArgs(t *testing.T) { 96 ci.Parallel(t) 97 98 srv, client, url := testServer(t, true, nil) 99 defer srv.Shutdown() 100 101 ui := cli.NewMockUi() 102 cmd := &QuotaStatusCommand{Meta: Meta{Ui: ui, flagAddress: url}} 103 104 // Create a quota 105 qs := testQuotaSpec() 106 _, err := client.Quotas().Register(qs, nil) 107 must.NoError(t, err) 108 109 args := complete.Args{Last: "quot"} 110 predictor := cmd.AutocompleteArgs() 111 112 res := predictor.Predict(args) 113 must.One(t, len(res)) 114 must.StrContains(t, qs.Name, res[0]) 115 }