github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/core/status/caas_test.go (about)

     1  // Copyright 2019 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package status_test
     5  
     6  import (
     7  	gc "gopkg.in/check.v1"
     8  
     9  	"github.com/juju/juju/core/status"
    10  )
    11  
    12  type UnitCloudStatusSuite struct{}
    13  
    14  var _ = gc.Suite(&UnitCloudStatusSuite{})
    15  
    16  func (s *UnitCloudStatusSuite) TestContainerOrUnitStatusChoice(c *gc.C) {
    17  
    18  	var checks = []struct {
    19  		cloudContainerStatus status.StatusInfo
    20  		unitStatus           status.StatusInfo
    21  		expectWorkload       bool
    22  		messageCheck         string
    23  	}{
    24  		{
    25  			cloudContainerStatus: status.StatusInfo{
    26  				Status:  status.Active,
    27  				Message: "container",
    28  			},
    29  			unitStatus: status.StatusInfo{
    30  				Status:  status.Active,
    31  				Message: "unit",
    32  			},
    33  			expectWorkload: true,
    34  			messageCheck:   "unit",
    35  		},
    36  		{
    37  			cloudContainerStatus: status.StatusInfo{
    38  				Status:  status.Blocked,
    39  				Message: "container",
    40  			},
    41  			unitStatus: status.StatusInfo{
    42  				Status:  status.Blocked,
    43  				Message: "unit",
    44  			},
    45  			expectWorkload: true,
    46  			messageCheck:   "container",
    47  		},
    48  		{
    49  			cloudContainerStatus: status.StatusInfo{
    50  				Status:  status.Error,
    51  				Message: "container",
    52  			},
    53  			unitStatus: status.StatusInfo{
    54  				Status:  status.Blocked,
    55  				Message: "unit",
    56  			},
    57  			expectWorkload: true,
    58  			messageCheck:   "container",
    59  		},
    60  		{
    61  			cloudContainerStatus: status.StatusInfo{
    62  				Status:  status.Blocked,
    63  				Message: "container",
    64  			},
    65  			unitStatus: status.StatusInfo{
    66  				Status:  status.Error,
    67  				Message: "unit",
    68  			},
    69  			expectWorkload: true,
    70  			messageCheck:   "unit",
    71  		},
    72  		{
    73  			cloudContainerStatus: status.StatusInfo{
    74  				Status:  status.Running,
    75  				Message: "container",
    76  			},
    77  			unitStatus: status.StatusInfo{
    78  				Status:  status.Waiting,
    79  				Message: status.MessageWaitForContainer,
    80  			},
    81  			expectWorkload: true,
    82  			messageCheck:   "container",
    83  		},
    84  		{
    85  			cloudContainerStatus: status.StatusInfo{},
    86  			unitStatus: status.StatusInfo{
    87  				Status:  status.Waiting,
    88  				Message: status.MessageWaitForContainer,
    89  			},
    90  			expectWorkload: true,
    91  			messageCheck:   status.MessageWaitForContainer,
    92  		},
    93  		{
    94  			cloudContainerStatus: status.StatusInfo{
    95  				Status:  status.Active,
    96  				Message: "container",
    97  			},
    98  			unitStatus: status.StatusInfo{
    99  				Status:  status.Waiting,
   100  				Message: "waiting for the movie to start",
   101  			},
   102  			expectWorkload: true,
   103  			messageCheck:   "waiting for the movie to start",
   104  		},
   105  		{
   106  			cloudContainerStatus: status.StatusInfo{
   107  				Status:  status.Error,
   108  				Message: "container",
   109  			},
   110  			unitStatus: status.StatusInfo{
   111  				Status:  status.Active,
   112  				Message: "unit",
   113  			},
   114  			expectWorkload: true,
   115  			messageCheck:   "container",
   116  		},
   117  		{
   118  			cloudContainerStatus: status.StatusInfo{
   119  				Status:  status.Allocating,
   120  				Message: "container",
   121  			},
   122  			unitStatus: status.StatusInfo{
   123  				Status:  status.Active,
   124  				Message: "unit",
   125  			},
   126  			expectWorkload: true,
   127  			messageCheck:   "container",
   128  		},
   129  		{
   130  			cloudContainerStatus: status.StatusInfo{
   131  				Status:  status.Blocked,
   132  				Message: "container",
   133  			},
   134  			unitStatus: status.StatusInfo{
   135  				Status:  status.Active,
   136  				Message: "unit",
   137  			},
   138  			expectWorkload: true,
   139  			messageCheck:   "container",
   140  		},
   141  		{
   142  			cloudContainerStatus: status.StatusInfo{},
   143  			unitStatus: status.StatusInfo{
   144  				Status:  status.Blocked,
   145  				Message: "unit",
   146  			},
   147  			expectWorkload: true,
   148  			messageCheck:   "unit",
   149  		},
   150  		{
   151  			cloudContainerStatus: status.StatusInfo{},
   152  			unitStatus:           status.StatusInfo{Status: status.Waiting, Message: status.MessageInitializingAgent},
   153  			expectWorkload:       true,
   154  			messageCheck:         status.MessageWaitForContainer,
   155  		},
   156  		{
   157  			cloudContainerStatus: status.StatusInfo{},
   158  			unitStatus:           status.StatusInfo{Status: status.Active, Message: "running"},
   159  			expectWorkload:       true,
   160  			messageCheck:         status.MessageWaitForContainer,
   161  		},
   162  		{
   163  			cloudContainerStatus: status.StatusInfo{},
   164  			unitStatus:           status.StatusInfo{Status: status.Active, Message: "running"},
   165  			expectWorkload:       false,
   166  			messageCheck:         "running",
   167  		},
   168  		{
   169  			cloudContainerStatus: status.StatusInfo{},
   170  			unitStatus:           status.StatusInfo{Status: status.Waiting, Message: status.MessageInitializingAgent},
   171  			expectWorkload:       false,
   172  			messageCheck:         status.MessageInitializingAgent,
   173  		},
   174  	}
   175  
   176  	for i, check := range checks {
   177  		c.Logf("Check %d", i)
   178  		c.Assert(status.UnitDisplayStatus(check.unitStatus, check.cloudContainerStatus, check.expectWorkload).Message, gc.Equals, check.messageCheck)
   179  	}
   180  }
   181  
   182  func (s *UnitCloudStatusSuite) TestApplicatoinOpeartorStatusChoice(c *gc.C) {
   183  
   184  	var checks = []struct {
   185  		operatorStatus status.StatusInfo
   186  		appStatus      status.StatusInfo
   187  		expectWorkload bool
   188  		messageCheck   string
   189  	}{
   190  		{
   191  			operatorStatus: status.StatusInfo{
   192  				Status:  status.Terminated,
   193  				Message: "operator",
   194  			},
   195  			appStatus: status.StatusInfo{
   196  				Status:  status.Active,
   197  				Message: "unit",
   198  			},
   199  			expectWorkload: true,
   200  			messageCheck:   "operator",
   201  		},
   202  		{
   203  			operatorStatus: status.StatusInfo{
   204  				Status:  status.Error,
   205  				Message: "operator",
   206  			},
   207  			appStatus: status.StatusInfo{
   208  				Status:  status.Active,
   209  				Message: "unit",
   210  			},
   211  			expectWorkload: true,
   212  			messageCheck:   "operator",
   213  		},
   214  		{
   215  			operatorStatus: status.StatusInfo{
   216  				Status:  status.Allocating,
   217  				Message: "operator",
   218  			},
   219  			appStatus: status.StatusInfo{
   220  				Status:  status.Active,
   221  				Message: "unit",
   222  			},
   223  			expectWorkload: true,
   224  			messageCheck:   "operator",
   225  		},
   226  		{
   227  			operatorStatus: status.StatusInfo{
   228  				Status:  status.Unknown,
   229  				Message: "operator",
   230  			},
   231  			appStatus: status.StatusInfo{
   232  				Status:  status.Active,
   233  				Message: "unit",
   234  			},
   235  			expectWorkload: true,
   236  			messageCheck:   "operator",
   237  		},
   238  		{
   239  			operatorStatus: status.StatusInfo{
   240  				Status:  status.Running,
   241  				Message: "operator",
   242  			},
   243  			appStatus: status.StatusInfo{
   244  				Status:  status.Active,
   245  				Message: "unit",
   246  			},
   247  			expectWorkload: true,
   248  			messageCheck:   "unit",
   249  		},
   250  		{
   251  			operatorStatus: status.StatusInfo{
   252  				Status:  status.Active,
   253  				Message: "operator",
   254  			},
   255  			appStatus: status.StatusInfo{
   256  				Status:  status.Blocked,
   257  				Message: "unit",
   258  			},
   259  			expectWorkload: true,
   260  			messageCheck:   "unit",
   261  		},
   262  		{
   263  			operatorStatus: status.StatusInfo{
   264  				Status:  status.Terminated,
   265  				Message: "operator",
   266  			},
   267  			appStatus: status.StatusInfo{
   268  				Status:  status.Terminated,
   269  				Message: "unit",
   270  			},
   271  			expectWorkload: true,
   272  			messageCheck:   "unit",
   273  		},
   274  		{
   275  			operatorStatus: status.StatusInfo{
   276  				Status:  status.Waiting,
   277  				Message: "operator",
   278  			},
   279  			appStatus: status.StatusInfo{
   280  				Status:  status.Waiting,
   281  				Message: "unit",
   282  			},
   283  			expectWorkload: false,
   284  			messageCheck:   "installing agent",
   285  		},
   286  		{
   287  			operatorStatus: status.StatusInfo{
   288  				Status:  status.Error,
   289  				Message: "operator",
   290  			},
   291  			appStatus: status.StatusInfo{
   292  				Status:  status.Waiting,
   293  				Message: "unit",
   294  			},
   295  			expectWorkload: false,
   296  			messageCheck:   "operator",
   297  		},
   298  	}
   299  
   300  	for i, check := range checks {
   301  		c.Logf("Check %d", i)
   302  		c.Assert(status.ApplicationDisplayStatus(check.appStatus, check.operatorStatus, check.expectWorkload).Message, gc.Equals, check.messageCheck)
   303  	}
   304  }