github.com/sacloud/iaas-api-go@v1.12.0/helper/query/server_user_name_test.go (about)

     1  // Copyright 2016-2022 The sacloud/iaas-api-go Authors
     2  //
     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  package query
    16  
    17  import (
    18  	"context"
    19  	"errors"
    20  	"testing"
    21  
    22  	"github.com/sacloud/iaas-api-go"
    23  	"github.com/sacloud/iaas-api-go/types"
    24  	"github.com/stretchr/testify/require"
    25  )
    26  
    27  func TestGetDefaultUserName(t *testing.T) {
    28  	cases := []struct {
    29  		msg           string
    30  		id            types.ID
    31  		reader        *ServerSourceReader
    32  		expectedValue string
    33  		expectedErr   error
    34  	}{
    35  		{
    36  			msg: "server reader returns unexpected error",
    37  			id:  1,
    38  			reader: &ServerSourceReader{
    39  				ServerReader: &dummyServerReader{
    40  					err: errors.New("dummy"),
    41  				},
    42  				ArchiveReader: &dummyArchiveReader{},
    43  				DiskReader:    &dummyDiskReader{},
    44  			},
    45  			expectedValue: "",
    46  			expectedErr:   errors.New("dummy"),
    47  		},
    48  		{
    49  			msg: "diskless server",
    50  			id:  1,
    51  			reader: &ServerSourceReader{
    52  				ServerReader: &dummyServerReader{
    53  					servers: []*iaas.Server{
    54  						{ID: 1},
    55  					},
    56  				},
    57  				ArchiveReader: &dummyArchiveReader{},
    58  				DiskReader:    &dummyDiskReader{},
    59  			},
    60  			expectedValue: "",
    61  			expectedErr:   nil,
    62  		},
    63  		{
    64  			msg: "disk reader returns unexpected error",
    65  			id:  1,
    66  			reader: &ServerSourceReader{
    67  				ServerReader: &dummyServerReader{
    68  					servers: []*iaas.Server{
    69  						{
    70  							ID: 1,
    71  							Disks: []*iaas.ServerConnectedDisk{
    72  								{ID: 2},
    73  							},
    74  						},
    75  					},
    76  				},
    77  				ArchiveReader: &dummyArchiveReader{},
    78  				DiskReader: &dummyDiskReader{
    79  					err: errors.New("dummy"),
    80  				},
    81  			},
    82  			expectedValue: "",
    83  			expectedErr:   errors.New("dummy"),
    84  		},
    85  		{
    86  			msg: "disk with source disk",
    87  			id:  1,
    88  			reader: &ServerSourceReader{
    89  				ServerReader: &dummyServerReader{
    90  					servers: []*iaas.Server{
    91  						{
    92  							ID: 1,
    93  							Disks: []*iaas.ServerConnectedDisk{
    94  								{ID: 2},
    95  							},
    96  						},
    97  					},
    98  				},
    99  				ArchiveReader: &dummyArchiveReader{},
   100  				DiskReader: &dummyDiskReader{
   101  					disks: []*iaas.Disk{
   102  						{
   103  							ID:           2,
   104  							SourceDiskID: 3,
   105  						},
   106  						{ID: 3}, // from empty disk
   107  					},
   108  				},
   109  			},
   110  			expectedValue: "",
   111  			expectedErr:   nil,
   112  		},
   113  		{
   114  			msg: "archive reader returns unexpected error",
   115  			id:  1,
   116  			reader: &ServerSourceReader{
   117  				ServerReader: &dummyServerReader{
   118  					servers: []*iaas.Server{
   119  						{
   120  							ID: 1,
   121  							Disks: []*iaas.ServerConnectedDisk{
   122  								{ID: 2},
   123  							},
   124  						},
   125  					},
   126  				},
   127  				DiskReader: &dummyDiskReader{
   128  					disks: []*iaas.Disk{
   129  						{
   130  							ID:              2,
   131  							SourceArchiveID: 3,
   132  						},
   133  					},
   134  				},
   135  				ArchiveReader: &dummyArchiveReader{
   136  					err: errors.New("dummy"),
   137  				},
   138  			},
   139  			expectedValue: "",
   140  			expectedErr:   errors.New("dummy"),
   141  		},
   142  		{
   143  			msg: "from ubuntu",
   144  			id:  1,
   145  			reader: &ServerSourceReader{
   146  				ServerReader: &dummyServerReader{
   147  					servers: []*iaas.Server{
   148  						{
   149  							ID: 1,
   150  							Disks: []*iaas.ServerConnectedDisk{
   151  								{ID: 2},
   152  							},
   153  						},
   154  					},
   155  				},
   156  				DiskReader: &dummyDiskReader{
   157  					disks: []*iaas.Disk{
   158  						{
   159  							ID:              2,
   160  							SourceArchiveID: 3,
   161  						},
   162  					},
   163  				},
   164  				ArchiveReader: &dummyArchiveReader{
   165  					archives: []*iaas.Archive{
   166  						{
   167  							ID:    3,
   168  							Scope: types.Scopes.Shared,
   169  							Tags:  types.Tags{"distro-ubuntu"},
   170  						},
   171  					},
   172  				},
   173  			},
   174  			expectedValue: "ubuntu",
   175  			expectedErr:   nil,
   176  		},
   177  		{
   178  			msg: "from rancheros",
   179  			id:  1,
   180  			reader: &ServerSourceReader{
   181  				ServerReader: &dummyServerReader{
   182  					servers: []*iaas.Server{
   183  						{
   184  							ID: 1,
   185  							Disks: []*iaas.ServerConnectedDisk{
   186  								{ID: 2},
   187  							},
   188  						},
   189  					},
   190  				},
   191  				DiskReader: &dummyDiskReader{
   192  					disks: []*iaas.Disk{
   193  						{
   194  							ID:              2,
   195  							SourceArchiveID: 3,
   196  						},
   197  					},
   198  				},
   199  				ArchiveReader: &dummyArchiveReader{
   200  					archives: []*iaas.Archive{
   201  						{
   202  							ID:    3,
   203  							Scope: types.Scopes.Shared,
   204  							Tags:  types.Tags{"distro-rancheros"},
   205  						},
   206  					},
   207  				},
   208  			},
   209  			expectedValue: "rancher",
   210  			expectedErr:   nil,
   211  		},
   212  		{
   213  			msg: "from k3os",
   214  			id:  1,
   215  			reader: &ServerSourceReader{
   216  				ServerReader: &dummyServerReader{
   217  					servers: []*iaas.Server{
   218  						{
   219  							ID: 1,
   220  							Disks: []*iaas.ServerConnectedDisk{
   221  								{ID: 2},
   222  							},
   223  						},
   224  					},
   225  				},
   226  				DiskReader: &dummyDiskReader{
   227  					disks: []*iaas.Disk{
   228  						{
   229  							ID:              2,
   230  							SourceArchiveID: 3,
   231  						},
   232  					},
   233  				},
   234  				ArchiveReader: &dummyArchiveReader{
   235  					archives: []*iaas.Archive{
   236  						{
   237  							ID:    3,
   238  							Scope: types.Scopes.Shared,
   239  							Tags:  types.Tags{"distro-k3os"},
   240  						},
   241  					},
   242  				},
   243  			},
   244  			expectedValue: "rancher",
   245  			expectedErr:   nil,
   246  		},
   247  		{
   248  			msg: "nested",
   249  			id:  1,
   250  			reader: &ServerSourceReader{
   251  				ServerReader: &dummyServerReader{
   252  					servers: []*iaas.Server{
   253  						{
   254  							ID: 1,
   255  							Disks: []*iaas.ServerConnectedDisk{
   256  								{ID: 2},
   257  							},
   258  						},
   259  					},
   260  				},
   261  				DiskReader: &dummyDiskReader{
   262  					disks: []*iaas.Disk{
   263  						{
   264  							ID:              2,
   265  							SourceArchiveID: 5,
   266  						},
   267  						{
   268  							ID:           3,
   269  							SourceDiskID: 4,
   270  						},
   271  						{
   272  							ID:              4,
   273  							SourceArchiveID: 6,
   274  						},
   275  					},
   276  				},
   277  				ArchiveReader: &dummyArchiveReader{
   278  					archives: []*iaas.Archive{
   279  						{
   280  							ID:           5,
   281  							SourceDiskID: 3,
   282  						},
   283  						{
   284  							ID:              6,
   285  							SourceArchiveID: 7,
   286  						},
   287  						{
   288  							ID:    7,
   289  							Scope: types.Scopes.Shared,
   290  							Tags:  types.Tags{"distro-ubuntu"},
   291  						},
   292  					},
   293  				},
   294  			},
   295  			expectedValue: "ubuntu",
   296  			expectedErr:   nil,
   297  		},
   298  	}
   299  
   300  	for _, tc := range cases {
   301  		actual, err := ServerDefaultUserName(context.Background(), "tk1v", tc.reader, tc.id)
   302  		if tc.expectedErr != nil {
   303  			require.Equal(t, tc.expectedErr, err, tc.msg)
   304  		} else {
   305  			require.NoError(t, err, tc.msg)
   306  		}
   307  		require.Equal(t, tc.expectedValue, actual, tc.msg)
   308  	}
   309  }