github.com/kbehouse/nsc@v0.0.6/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 }