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  }