github.com/nats-io/nsc@v0.0.0-20221206222106-35db9400b257/cmd/editexport_test.go (about)

     1  /*
     2   * Copyright 2018-2020 The NATS Authors
     3   * Licensed under the Apache License, Version 2.0 (the "License");
     4   * you may not use this file except in compliance with the License.
     5   * You may obtain a copy of the License at
     6   *
     7   * http://www.apache.org/licenses/LICENSE-2.0
     8   *
     9   * Unless required by applicable law or agreed to in writing, software
    10   * distributed under the License is distributed on an "AS IS" BASIS,
    11   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12   * See the License for the specific language governing permissions and
    13   * limitations under the License.
    14   */
    15  
    16  package cmd
    17  
    18  import (
    19  	"testing"
    20  	"time"
    21  
    22  	"github.com/nats-io/jwt/v2"
    23  	"github.com/stretchr/testify/require"
    24  )
    25  
    26  func Test_EditExport_Private(t *testing.T) {
    27  	ts := NewTestStore(t, "O")
    28  	defer ts.Done(t)
    29  
    30  	ts.AddAccount(t, "A")
    31  	ts.AddExport(t, "A", jwt.Service, "a", true)
    32  
    33  	_, _, err := ExecuteCmd(createEditExportCmd(), "--subject", "a", "--private", "--response-type", jwt.ResponseTypeChunked)
    34  	require.NoError(t, err)
    35  	ac, err := ts.Store.ReadAccountClaim("A")
    36  	require.NoError(t, err)
    37  	require.True(t, ac.Exports[0].TokenReq)
    38  	require.EqualValues(t, jwt.ResponseTypeChunked, ac.Exports[0].ResponseType)
    39  }
    40  
    41  func Test_EditExport_Latency(t *testing.T) {
    42  	ts := NewTestStore(t, "O")
    43  	defer ts.Done(t)
    44  
    45  	ts.AddAccount(t, "A")
    46  	ts.AddExport(t, "A", jwt.Service, "a", true)
    47  
    48  	ac, err := ts.Store.ReadAccountClaim("A")
    49  	require.NoError(t, err)
    50  	require.Nil(t, ac.Exports[0].Latency)
    51  
    52  	_, _, err = ExecuteCmd(createEditExportCmd(), "--subject", "a", "--sampling", "100", "--latency", "lat", "--response-threshold", "1s")
    53  	require.NoError(t, err)
    54  
    55  	ac, err = ts.Store.ReadAccountClaim("A")
    56  	require.NoError(t, err)
    57  	require.NotNil(t, ac.Exports[0].Latency)
    58  	require.Equal(t, jwt.SamplingRate(100), ac.Exports[0].Latency.Sampling)
    59  	require.Equal(t, jwt.Subject("lat"), ac.Exports[0].Latency.Results)
    60  	require.Equal(t, time.Second, ac.Exports[0].ResponseThreshold)
    61  }
    62  
    63  func Test_EditExportInteractive(t *testing.T) {
    64  	ts := NewTestStore(t, "O")
    65  	defer ts.Done(t)
    66  
    67  	ts.AddAccount(t, "A")
    68  	ts.AddExport(t, "A", jwt.Service, "a", true)
    69  	ts.AddExport(t, "A", jwt.Service, "b", true)
    70  
    71  	link := "http://foo/bar"
    72  	_, _, err := ExecuteInteractiveCmd(createEditExportCmd(), []interface{}{1, 1, "c", "c", false, false, 1, "1s", "desc", link})
    73  	require.NoError(t, err)
    74  
    75  	ac, err := ts.Store.ReadAccountClaim("A")
    76  	require.NoError(t, err)
    77  	require.Len(t, ac.Exports, 2)
    78  	require.Equal(t, jwt.Subject("c"), ac.Exports[1].Subject)
    79  	require.EqualValues(t, jwt.ResponseTypeStream, ac.Exports[1].ResponseType)
    80  	require.Equal(t, ac.Exports[1].Description, "desc")
    81  	require.Equal(t, ac.Exports[1].InfoURL, link)
    82  	require.Equal(t, ac.Exports[1].ResponseThreshold, time.Second)
    83  }
    84  
    85  func Test_EditExportInteractiveLatency(t *testing.T) {
    86  	ts := NewTestStore(t, "O")
    87  	defer ts.Done(t)
    88  
    89  	ts.AddAccount(t, "A")
    90  	ts.AddExport(t, "A", jwt.Service, "a", true)
    91  
    92  	_, _, err := ExecuteInteractiveCmd(createEditExportCmd(), []interface{}{0, 1, "c", "c", false, true, "header", "lat", 2, "", "", ""})
    93  	require.NoError(t, err)
    94  
    95  	ac, err := ts.Store.ReadAccountClaim("A")
    96  	require.NoError(t, err)
    97  	require.Equal(t, jwt.Subject("c"), ac.Exports[0].Subject)
    98  	require.Equal(t, "c", ac.Exports[0].Name)
    99  	require.NotNil(t, ac.Exports[0].Latency)
   100  	require.Equal(t, jwt.Headers, ac.Exports[0].Latency.Sampling)
   101  	require.Equal(t, jwt.Subject("lat"), ac.Exports[0].Latency.Results)
   102  	require.EqualValues(t, jwt.ResponseTypeChunked, ac.Exports[0].ResponseType)
   103  }
   104  
   105  func Test_EditExportRmLatencySampling(t *testing.T) {
   106  	ts := NewTestStore(t, "O")
   107  	defer ts.Done(t)
   108  
   109  	ts.AddAccount(t, "A")
   110  	ts.AddExport(t, "A", jwt.Service, "a", true)
   111  
   112  	_, _, err := ExecuteCmd(createEditExportCmd(), "--subject", "a", "--sampling", "header", "--latency", "metrics.a")
   113  	require.NoError(t, err)
   114  
   115  	ac, err := ts.Store.ReadAccountClaim("A")
   116  	require.NoError(t, err)
   117  	require.NotNil(t, ac.Exports[0].Latency)
   118  	require.Equal(t, jwt.Headers, ac.Exports[0].Latency.Sampling)
   119  
   120  	_, _, err = ExecuteCmd(createEditExportCmd(), "--subject", "a", "--rm-latency-sampling")
   121  	require.NoError(t, err)
   122  	ac, err = ts.Store.ReadAccountClaim("A")
   123  	require.NoError(t, err)
   124  	require.Nil(t, ac.Exports[0].Latency)
   125  }
   126  
   127  func Test_EditExportNoExports(t *testing.T) {
   128  	ts := NewTestStore(t, "O")
   129  	defer ts.Done(t)
   130  
   131  	ts.AddAccount(t, "A")
   132  	_, _, err := ExecuteCmd(createEditExportCmd(), "--subject", "a")
   133  	require.Error(t, err)
   134  	require.Contains(t, err.Error(), "doesn't have exports")
   135  }