github.com/jenkins-x/jx/v2@v2.1.155/pkg/cloud/aks/aks_test.go (about)

     1  // +build unit
     2  
     3  package aks_test
     4  
     5  import (
     6  	"reflect"
     7  	"testing"
     8  
     9  	"github.com/jenkins-x/jx/v2/pkg/cloud/aks"
    10  	"github.com/stretchr/testify/assert"
    11  
    12  	mocks "github.com/jenkins-x/jx/v2/pkg/util/mocks"
    13  	. "github.com/petergtz/pegomock"
    14  )
    15  
    16  func aksWithRunner(t *testing.T, expectedError error, expectedOutput string) *aks.AzureRunner {
    17  	RegisterMockTestingT(t)
    18  	runner := mocks.NewMockCommander()
    19  	When(runner.RunWithoutRetry()).ThenReturn(expectedOutput, expectedError)
    20  	return aks.NewAzureRunnerWithCommander(runner)
    21  }
    22  
    23  func TestGetClusterClient(t *testing.T) {
    24  	azureCLI := aksWithRunner(t, nil, `[{
    25  			"group": "musekeen",
    26  			"id": "01234567-89ab-cdef-0123-456789abcdef",
    27  			"name": "scalefrost",
    28  			"uri": "scalefrost-musekeen-2e62fb-6d5429ef.hcp.westus2.azmk8s.io"
    29  		},
    30  		{
    31  			"group": "resource_group",
    32  			"id": "abcd",
    33  			"name": "name",
    34  			"uri": "aks.hcp.eatus.azmk8s.io"
    35  		}
    36  	]`)
    37  	rg, name, client, err := azureCLI.GetClusterClient("https://aks.hcp.eatus.azmk8s.io:443")
    38  	assert.Equal(t, client, "abcd")
    39  	assert.Equal(t, rg, "resource_group")
    40  	assert.Equal(t, name, "name")
    41  	assert.Nil(t, err)
    42  }
    43  
    44  func TestNotACR(t *testing.T) {
    45  	azureCLI := aks.NewAzureRunner()
    46  	config, registry, id, err := azureCLI.GetRegistry("", "rg", "name", "azure.docker.io")
    47  	assert.Equal(t, "", config)
    48  	assert.Equal(t, "azure.docker.io", registry)
    49  	assert.Equal(t, "", id)
    50  	assert.Nil(t, err)
    51  }
    52  
    53  func TestNoRegistrySet(t *testing.T) {
    54  	RegisterMockTestingT(t)
    55  	runner := mocks.NewMockCommander()
    56  	When(runner.RunWithoutRetry()).Then(func(params []Param) ReturnValues {
    57  		return []ReturnValue{showResult(runner), nil}
    58  	})
    59  	azureCLI := aks.NewAzureRunnerWithCommander(runner)
    60  
    61  	config, registry, id, err := azureCLI.GetRegistry("", "rg", "azure", "")
    62  	assert.Equal(t, `{"auths":{"azure.azurecr.io":{"auth":"YXp1cmU6cGFzc3dvcmQxMjM="}}}`, config)
    63  	assert.Equal(t, "azure.azurecr.io", registry)
    64  	assert.Equal(t, "fakeid", id)
    65  	assert.Nil(t, err)
    66  }
    67  
    68  func TestSubscriptionSet(t *testing.T) {
    69  	RegisterMockTestingT(t)
    70  	runner := mocks.NewMockCommander()
    71  	When(runner.RunWithoutRetry()).Then(func(params []Param) ReturnValues {
    72  		return []ReturnValue{showResult(runner), nil}
    73  	})
    74  	azureCLI := aks.NewAzureRunnerWithCommander(runner)
    75  
    76  	config, registry, id, err := azureCLI.GetRegistry("sub", "rg", "azuresub", "")
    77  	assert.Equal(t, `{"auths":{"azure.azurecr.io":{"auth":"YXp1cmU6cGFzc3dvcmQxMjM="}}}`, config)
    78  	assert.Equal(t, "azuresub.azurecr.io", registry)
    79  	assert.Equal(t, "fakeidsub", id)
    80  	assert.Nil(t, err)
    81  }
    82  
    83  func TestRegistry404(t *testing.T) {
    84  	RegisterMockTestingT(t)
    85  	runner := mocks.NewMockCommander()
    86  	When(runner.RunWithoutRetry()).Then(func(params []Param) ReturnValues {
    87  		return []ReturnValue{showResult(runner), nil}
    88  	})
    89  	azureCLI := aks.NewAzureRunnerWithCommander(runner)
    90  
    91  	config, registry, id, err := azureCLI.GetRegistry("", "newrg", "newacr", "notfound.azurecr.io")
    92  	assert.Equal(t, `{"auths":{"newacr.azurecr.io":{"auth":"YXp1cmU6cGFzc3dvcmQxMjM="}}}`, config)
    93  	assert.Equal(t, "newacr.azurecr.io", registry)
    94  	assert.Equal(t, "fakeidxxx", id)
    95  	assert.Nil(t, err)
    96  }
    97  
    98  func TestRegistry404WithSubSet(t *testing.T) {
    99  	RegisterMockTestingT(t)
   100  	runner := mocks.NewMockCommander()
   101  	When(runner.RunWithoutRetry()).Then(func(params []Param) ReturnValues {
   102  		return []ReturnValue{showResult(runner), nil}
   103  	})
   104  	azureCLI := aks.NewAzureRunnerWithCommander(runner)
   105  
   106  	config, registry, id, err := azureCLI.GetRegistry("sub", "newrg", "newacr", "notfound.azurecr.io")
   107  	assert.Equal(t, `{"auths":{"newacr.azurecr.io":{"auth":"YXp1cmU6cGFzc3dvcmQxMjM="}}}`, config)
   108  	assert.Equal(t, "newacr.azurecr.io", registry)
   109  	assert.Equal(t, "fakeidsub", id)
   110  	assert.Nil(t, err)
   111  }
   112  
   113  func showResult(runner *mocks.MockCommander) string {
   114  	args := runner.VerifyWasCalled(AtLeast(1)).SetArgs(AnyStringSlice()).GetCapturedArguments()
   115  	if reflect.DeepEqual(args, []string{"acr", "list", "--query", "[].{uri:loginServer,id:id,name:name,group:resourceGroup}"}) {
   116  		return `[
   117  			{
   118  				"group": "musekeen",
   119  				"id": "fakeidnotused",
   120  				"name": "jenkinsx",
   121  				"uri": "jenkinsx.azurecr.io"
   122  			},
   123  			{
   124  				"group": "musekeen",
   125  				"id": "fakeid",
   126  				"name": "azure",
   127  				"uri": "azure.azurecr.io"
   128  			}
   129  		]`
   130  	} else if reflect.DeepEqual(args, []string{"acr", "list", "--query", "[].{uri:loginServer,id:id,name:name,group:resourceGroup}", "--subscription", "sub"}) {
   131  		return `[
   132  			{
   133  				"group": "musekeen",
   134  				"id": "fakeidnotused",
   135  				"name": "jenkinsx",
   136  				"uri": "jenkinsx.azurecr.io"
   137  			},
   138  			{
   139  				"group": "musekeen",
   140  				"id": "fakeidsub",
   141  				"name": "azure",
   142  				"uri": "azuresub.azurecr.io"
   143  			}
   144  		]`
   145  	} else if reflect.DeepEqual(args, []string{"acr", "create", "-g", "newrg", "-n", "newacr", "--sku", "Standard", "--admin-enabled", "--query", "id", "-o", "tsv"}) {
   146  		return `fakeidxxx`
   147  	} else if reflect.DeepEqual(args, []string{"acr", "create", "-g", "newrg", "-n", "newacr", "--sku", "Standard", "--admin-enabled", "--query", "id", "-o", "tsv", "--subscription", "sub"}) {
   148  		return `fakeidsub`
   149  	} else {
   150  		return `{
   151  			"passwords": [
   152  				{
   153  					"name": "password",
   154  					"value": "password123"
   155  				},
   156  				{
   157  					"name": "password2",
   158  					"value": "passwordabc"
   159  				}
   160  			],
   161  			"username": "azure"
   162  		}`
   163  	}
   164  }