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  }