github.com/nats-io/nsc@v0.0.0-20221206222106-35db9400b257/cmd/migrate_test.go (about) 1 /* 2 * Copyright 2018-2022 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 "path/filepath" 20 "testing" 21 22 "github.com/nats-io/nsc/cmd/store" 23 "github.com/stretchr/testify/require" 24 ) 25 26 func Test_Migrate(t *testing.T) { 27 ts := NewTestStore(t, "O") 28 defer ts.Done(t) 29 30 ts.AddAccount(t, "A") 31 ts.AddUser(t, "A", "a") 32 33 ts.AddAccount(t, "B") 34 ts.AddUser(t, "B", "b") 35 36 ts.AddOperator(t, "OO") 37 _, _, err := ExecuteCmd(createMigrateCmd(), "--url", filepath.Join(ts.GetStoresRoot(), "O", "accounts", "A", "A.jwt")) 38 require.NoError(t, err) 39 40 oos, err := store.LoadStore(filepath.Join(ts.GetStoresRoot(), "OO")) 41 require.NoError(t, err) 42 _, err = oos.ReadAccountClaim("A") 43 require.NoError(t, err) 44 _, err = oos.ReadUserClaim("A", "a") 45 require.NoError(t, err) 46 } 47 48 func Test_MigrateMany(t *testing.T) { 49 ts := NewTestStore(t, "O") 50 defer ts.Done(t) 51 52 ts.AddAccount(t, "A") 53 ts.AddUser(t, "A", "a") 54 ts.AddAccount(t, "B") 55 ts.AddUser(t, "B", "b") 56 57 ts.AddOperator(t, "OO") 58 _, _, err := ExecuteCmd(createMigrateCmd(), "--operator-dir", filepath.Join(ts.GetStoresRoot(), "O")) 59 require.NoError(t, err) 60 61 oos, err := store.LoadStore(filepath.Join(ts.GetStoresRoot(), "OO")) 62 require.NoError(t, err) 63 _, err = oos.ReadAccountClaim("A") 64 require.NoError(t, err) 65 _, err = oos.ReadUserClaim("A", "a") 66 require.NoError(t, err) 67 _, err = oos.ReadAccountClaim("B") 68 require.NoError(t, err) 69 _, err = oos.ReadUserClaim("B", "b") 70 require.NoError(t, err) 71 } 72 73 func Test_MigrateSingleInteractive(t *testing.T) { 74 ts := NewTestStore(t, "O") 75 defer ts.Done(t) 76 77 ts.AddAccount(t, "A") 78 ts.AddUser(t, "A", "a") 79 ts.AddAccount(t, "B") 80 ts.AddUser(t, "B", "b") 81 ts.AddOperator(t, "OO") 82 83 args := []interface{}{false, filepath.Join(ts.GetStoresRoot(), "O", store.Accounts, "A", "A.jwt")} 84 _, _, err := ExecuteInteractiveCmd(createMigrateCmd(), args) 85 require.NoError(t, err) 86 87 oos, err := store.LoadStore(filepath.Join(ts.GetStoresRoot(), "OO")) 88 require.NoError(t, err) 89 _, err = oos.ReadAccountClaim("A") 90 require.NoError(t, err) 91 _, err = oos.ReadUserClaim("A", "a") 92 require.NoError(t, err) 93 } 94 95 func Test_MigrateManaged(t *testing.T) { 96 _, opk, okp := CreateOperatorKey(t) 97 as, m := RunTestAccountServerWithOperatorKP(t, okp, TasOpts{Vers: 2}) 98 defer as.Close() 99 100 // create the managed operator store 101 ts := NewTestStoreWithOperatorJWT(t, string(m["operator"])) 102 defer ts.Done(t) 103 104 // add a local operator with account/user 105 ts.AddOperator(t, "O") 106 ts.AddAccount(t, "A") 107 apk := ts.GetAccountPublicKey(t, "A") 108 ts.AddUser(t, "A", "U") 109 110 // switch back to managed 111 ts.SwitchOperator(t, "T") 112 113 // migrate the local operator 114 _, _, err := ExecuteCmd(createMigrateCmd(), "--operator-dir", filepath.Join(ts.StoreDir, "O")) 115 require.NoError(t, err) 116 require.NotNil(t, m[apk]) 117 118 ac, err := ts.Store.ReadAccountClaim("A") 119 require.NoError(t, err) 120 require.Equal(t, opk, ac.Issuer) 121 122 uc, err := ts.Store.ReadUserClaim("A", "U") 123 require.NoError(t, err) 124 require.NotNil(t, uc) 125 }