~juju-qa/ubuntu/xenial/juju/2.0-rc2

« back to all changes in this revision

Viewing changes to src/github.com/juju/juju/worker/uniter/uniter_test.go

  • Committer: Nicholas Skaggs
  • Date: 2016-09-30 14:39:30 UTC
  • mfrom: (1.8.1)
  • Revision ID: nicholas.skaggs@canonical.com-20160930143930-vwwhrefh6ftckccy
import upstream

Show diffs side-by-side

added added

removed removed

Lines of Context:
19
19
        jujutesting "github.com/juju/testing"
20
20
        jc "github.com/juju/testing/checkers"
21
21
        ft "github.com/juju/testing/filetesting"
22
 
        "github.com/juju/utils/clock"
23
22
        gc "gopkg.in/check.v1"
24
23
        corecharm "gopkg.in/juju/charm.v6-unstable"
25
24
 
69
68
        s.oldLcAll = os.Getenv("LC_ALL")
70
69
        os.Setenv("LC_ALL", "en_US")
71
70
        s.unitDir = filepath.Join(s.dataDir, "agents", "unit-u-0")
72
 
 
73
 
        zone, err := time.LoadLocation("")
74
 
        c.Assert(err, jc.ErrorIsNil)
75
 
        now := time.Date(2030, 11, 11, 11, 11, 11, 11, zone)
76
 
        leaseClock = jujutesting.NewClock(now)
77
 
        oldGetClock := state.GetClock
78
 
        state.GetClock = func() clock.Clock {
79
 
                return leaseClock
80
 
        }
81
 
        s.AddCleanup(func(*gc.C) { state.GetClock = oldGetClock })
82
71
        all.RegisterForServer()
83
72
}
84
73
 
93
82
        c.Assert(err, jc.ErrorIsNil)
94
83
        now := time.Date(2030, 11, 11, 11, 11, 11, 11, zone)
95
84
        leaseClock = jujutesting.NewClock(now)
96
 
        state.GetClock = func() clock.Clock {
97
 
                return leaseClock
98
 
        }
99
85
        s.updateStatusHookTicker = newManualTicker()
100
86
        s.GitSuite.SetUpTest(c)
101
87
        s.JujuConnSuite.SetUpTest(c)
 
88
        err = s.State.SetClockForTesting(leaseClock)
 
89
        c.Assert(err, jc.ErrorIsNil)
102
90
}
103
91
 
104
92
func (s *UniterSuite) TearDownTest(c *gc.C) {
162
150
        })
163
151
}
164
152
 
 
153
func (s *UniterSuite) TestPreviousDownloadsCleared(c *gc.C) {
 
154
        s.runUniterTests(c, []uniterTest{
 
155
                ut(
 
156
                        "Ensure stale download files are cleared on uniter startup",
 
157
                        createCharm{},
 
158
                        serveCharm{},
 
159
                        ensureStateWorker{},
 
160
                        createServiceAndUnit{},
 
161
                        createDownloads{},
 
162
                        startUniter{},
 
163
                        waitAddresses{},
 
164
                        waitUnitAgent{status: status.Idle},
 
165
                        verifyDownloadsCleared{},
 
166
                ),
 
167
        })
 
168
}
 
169
 
165
170
func (s *UniterSuite) TestUniterBootstrap(c *gc.C) {
166
171
        //TODO(bogdanteleaga): Fix this on windows
167
172
        if runtime.GOOS == "windows" {
186
191
        })
187
192
}
188
193
 
 
194
type noopExecutor struct {
 
195
        operation.Executor
 
196
}
 
197
 
 
198
func (m *noopExecutor) Run(op operation.Operation) error {
 
199
        return errors.New("some error occurred")
 
200
}
 
201
 
 
202
func (s *UniterSuite) TestUniterStartupStatus(c *gc.C) {
 
203
        executorFunc := func(stateFilePath string, getInstallCharm func() (*corecharm.URL, error), acquireLock func() (mutex.Releaser, error)) (operation.Executor, error) {
 
204
                e, err := operation.NewExecutor(stateFilePath, getInstallCharm, acquireLock)
 
205
                c.Assert(err, jc.ErrorIsNil)
 
206
                return &mockExecutor{e}, nil
 
207
        }
 
208
        s.runUniterTests(c, []uniterTest{
 
209
                ut(
 
210
                        "unit status and message at startup",
 
211
                        createCharm{},
 
212
                        serveCharm{},
 
213
                        ensureStateWorker{},
 
214
                        createServiceAndUnit{},
 
215
                        startUniter{
 
216
                                newExecutorFunc: executorFunc,
 
217
                        },
 
218
                        waitUnitAgent{
 
219
                                statusGetter: unitStatusGetter,
 
220
                                status:       status.Waiting,
 
221
                                info:         status.MessageInitializingAgent,
 
222
                        },
 
223
                        waitUnitAgent{
 
224
                                status: status.Failed,
 
225
                                info:   "resolver loop error",
 
226
                        },
 
227
                        expectError{".*some error occurred.*"},
 
228
                ),
 
229
        })
 
230
}
 
231
 
189
232
func (s *UniterSuite) TestUniterInstallHook(c *gc.C) {
190
233
        s.runUniterTests(c, []uniterTest{
191
234
                ut(
195
238
 
196
239
                        resolveError{state.ResolvedNoHooks},
197
240
                        waitUnitAgent{
198
 
                                status: status.StatusIdle,
 
241
                                status: status.Idle,
199
242
                        },
200
243
                        waitUnitAgent{
201
244
                                statusGetter: unitStatusGetter,
202
 
                                status:       status.StatusUnknown,
 
245
                                status:       status.Unknown,
203
246
                        },
204
247
                        waitHooks{"leader-elected", "config-changed", "start"},
205
248
                ), ut(
210
253
                        resolveError{state.ResolvedRetryHooks},
211
254
                        waitUnitAgent{
212
255
                                statusGetter: unitStatusGetter,
213
 
                                status:       status.StatusError,
 
256
                                status:       status.Error,
214
257
                                info:         `hook failed: "install"`,
215
258
                                data: map[string]interface{}{
216
259
                                        "hook": "install",
222
265
 
223
266
                        resolveError{state.ResolvedRetryHooks},
224
267
                        waitUnitAgent{
225
 
                                status: status.StatusIdle,
 
268
                                status: status.Idle,
226
269
                        },
227
270
                        waitHooks{"install", "leader-elected", "config-changed", "start"},
228
271
                ),
237
280
                        serveCharm{},
238
281
                        createUniter{},
239
282
                        waitHooks(startupHooks(false)),
240
 
                        waitUnitAgent{status: status.StatusIdle},
 
283
                        waitUnitAgent{status: status.Idle},
241
284
                        updateStatusHookTick{},
242
285
                        waitHooks{"update-status"},
243
286
                ),
256
299
                        // Resolve and hook should run.
257
300
                        resolveError{state.ResolvedNoHooks},
258
301
                        waitUnitAgent{
259
 
                                status: status.StatusIdle,
 
302
                                status: status.Idle,
260
303
                        },
261
304
                        waitHooks{},
262
305
                        updateStatusHookTick{},
274
317
 
275
318
                        resolveError{state.ResolvedNoHooks},
276
319
                        waitUnitAgent{
277
 
                                status: status.StatusIdle,
 
320
                                status: status.Idle,
278
321
                        },
279
322
                        waitUnitAgent{
280
323
                                statusGetter: unitStatusGetter,
281
 
                                status:       status.StatusMaintenance,
 
324
                                status:       status.Maintenance,
282
325
                                info:         "installing charm software",
283
326
                        },
284
327
                        waitHooks{"config-changed"},
291
334
                        resolveError{state.ResolvedRetryHooks},
292
335
                        waitUnitAgent{
293
336
                                statusGetter: unitStatusGetter,
294
 
                                status:       status.StatusError,
 
337
                                status:       status.Error,
295
338
                                info:         `hook failed: "start"`,
296
339
                                data: map[string]interface{}{
297
340
                                        "hook": "start",
303
346
                        fixHook{"start"},
304
347
                        resolveError{state.ResolvedRetryHooks},
305
348
                        waitUnitAgent{
306
 
                                status: status.StatusIdle,
 
349
                                status: status.Idle,
307
350
                        },
308
351
                        waitHooks{"start", "config-changed"},
309
352
                        verifyRunning{},
320
363
                        createUniter{},
321
364
                        waitUnitAgent{
322
365
                                statusGetter: unitStatusGetter,
323
 
                                status:       status.StatusError,
 
366
                                status:       status.Error,
324
367
                                info:         `hook failed: "install"`,
325
368
                                data: map[string]interface{}{
326
369
                                        "hook": "install",
329
372
                        resolveError{state.ResolvedNoHooks},
330
373
                        waitUnitAgent{
331
374
                                statusGetter: unitStatusGetter,
332
 
                                status:       status.StatusError,
 
375
                                status:       status.Error,
333
376
                                info:         `hook failed: "leader-elected"`,
334
377
                                data: map[string]interface{}{
335
378
                                        "hook": "leader-elected",
338
381
                        resolveError{state.ResolvedNoHooks},
339
382
                        waitUnitAgent{
340
383
                                statusGetter: unitStatusGetter,
341
 
                                status:       status.StatusError,
 
384
                                status:       status.Error,
342
385
                                info:         `hook failed: "config-changed"`,
343
386
                                data: map[string]interface{}{
344
387
                                        "hook": "config-changed",
347
390
                        resolveError{state.ResolvedNoHooks},
348
391
                        waitUnitAgent{
349
392
                                statusGetter: unitStatusGetter,
350
 
                                status:       status.StatusError,
 
393
                                status:       status.Error,
351
394
                                info:         `hook failed: "start"`,
352
395
                                data: map[string]interface{}{
353
396
                                        "hook": "start",
370
413
                        fixHook{"config-changed"},
371
414
                        resolveError{state.ResolvedNoHooks},
372
415
                        waitUnitAgent{
373
 
                                status: status.StatusIdle,
 
416
                                status: status.Idle,
374
417
                        },
375
418
                        waitUnitAgent{
376
419
                                statusGetter: unitStatusGetter,
377
 
                                status:       status.StatusUnknown,
 
420
                                status:       status.Unknown,
378
421
                        },
379
422
                        // TODO(axw) confirm with fwereade that this is correct.
380
423
                        // Previously we would see "start", "config-changed".
394
437
                        resolveError{state.ResolvedRetryHooks},
395
438
                        waitUnitAgent{
396
439
                                statusGetter: unitStatusGetter,
397
 
                                status:       status.StatusError,
 
440
                                status:       status.Error,
398
441
                                info:         `hook failed: "config-changed"`,
399
442
                                data: map[string]interface{}{
400
443
                                        "hook": "config-changed",
406
449
                        fixHook{"config-changed"},
407
450
                        resolveError{state.ResolvedRetryHooks},
408
451
                        waitUnitAgent{
409
 
                                status: status.StatusIdle,
 
452
                                status: status.Idle,
410
453
                        },
411
454
                        waitHooks{"config-changed", "start"},
412
455
                        verifyRunning{},
420
463
                        serveCharm{},
421
464
                        createUniter{},
422
465
                        waitUnitAgent{
423
 
                                status: status.StatusIdle,
 
466
                                status: status.Idle,
424
467
                        },
425
468
                        waitHooks{"install", "leader-elected", "config-changed", "start"},
426
469
                        assertYaml{"charm/config.out", map[string]interface{}{
459
502
                        waitAddresses{},
460
503
                        waitHooks{},
461
504
                        lock.release(),
462
 
                        waitUnitAgent{status: status.StatusIdle},
 
505
                        waitUnitAgent{status: status.Idle},
463
506
                        waitHooks{"install", "leader-elected", "config-changed", "start"},
464
507
                ),
465
508
        })
508
551
                        createCharm{revision: 1},
509
552
                        upgradeCharm{revision: 1},
510
553
                        waitUnitAgent{
511
 
                                status: status.StatusIdle,
 
554
                                status: status.Idle,
512
555
                                charm:  1,
513
556
                        },
514
557
                        waitUnitAgent{
515
558
                                statusGetter: unitStatusGetter,
516
 
                                status:       status.StatusUnknown,
 
559
                                status:       status.Unknown,
517
560
                                charm:        1,
518
561
                        },
519
562
                        waitHooks{"upgrade-charm", "config-changed"},
531
574
                        createCharm{revision: 1},
532
575
                        upgradeCharm{revision: 1, forced: true},
533
576
                        waitUnitAgent{
534
 
                                status: status.StatusIdle,
 
577
                                status: status.Idle,
535
578
                                charm:  1,
536
579
                        },
537
580
                        waitUnitAgent{
538
581
                                statusGetter: unitStatusGetter,
539
 
                                status:       status.StatusUnknown,
 
582
                                status:       status.Unknown,
540
583
                                charm:        1,
541
584
                        },
542
585
                        waitHooks{"upgrade-charm", "config-changed"},
555
598
                        upgradeCharm{revision: 1},
556
599
                        waitUnitAgent{
557
600
                                statusGetter: unitStatusGetter,
558
 
                                status:       status.StatusError,
 
601
                                status:       status.Error,
559
602
                                info:         `hook failed: "upgrade-charm"`,
560
603
                                data: map[string]interface{}{
561
604
                                        "hook": "upgrade-charm",
568
611
 
569
612
                        resolveError{state.ResolvedNoHooks},
570
613
                        waitUnitAgent{
571
 
                                status: status.StatusIdle,
 
614
                                status: status.Idle,
572
615
                                charm:  1,
573
616
                        },
574
617
                        waitUnitAgent{
575
618
                                statusGetter: unitStatusGetter,
576
 
                                status:       status.StatusUnknown,
 
619
                                status:       status.Unknown,
577
620
                                charm:        1,
578
621
                        },
579
622
                        waitHooks{"config-changed"},
591
634
                        upgradeCharm{revision: 1},
592
635
                        waitUnitAgent{
593
636
                                statusGetter: unitStatusGetter,
594
 
                                status:       status.StatusError,
 
637
                                status:       status.Error,
595
638
                                info:         `hook failed: "upgrade-charm"`,
596
639
                                data: map[string]interface{}{
597
640
                                        "hook": "upgrade-charm",
605
648
                        resolveError{state.ResolvedRetryHooks},
606
649
                        waitUnitAgent{
607
650
                                statusGetter: unitStatusGetter,
608
 
                                status:       status.StatusError,
 
651
                                status:       status.Error,
609
652
                                info:         `hook failed: "upgrade-charm"`,
610
653
                                data: map[string]interface{}{
611
654
                                        "hook": "upgrade-charm",
618
661
                        fixHook{"upgrade-charm"},
619
662
                        resolveError{state.ResolvedRetryHooks},
620
663
                        waitUnitAgent{
621
 
                                status: status.StatusIdle,
 
664
                                status: status.Idle,
622
665
                                charm:  1,
623
666
                        },
624
667
                        waitHooks{"upgrade-charm", "config-changed"},
683
726
                        createCharm{customize: appendResource},
684
727
                        serveCharm{},
685
728
                        createUniter{},
686
 
                        waitUnitAgent{status: status.StatusIdle},
 
729
                        waitUnitAgent{status: status.Idle},
687
730
                        waitHooks(startupHooks(false)),
688
731
                        verifyCharm{},
689
732
 
717
760
                        serveCharm{},
718
761
                        createUniter{},
719
762
                        waitUnitAgent{
720
 
                                status: status.StatusIdle,
 
763
                                status: status.Idle,
721
764
                        },
722
765
                        waitUnitAgent{
723
766
                                statusGetter: unitStatusGetter,
724
 
                                status:       status.StatusUnknown,
 
767
                                status:       status.Unknown,
725
768
                        },
726
769
                        waitHooks{"install", "leader-elected", "config-changed", "start"},
727
770
 
734
777
                        serveCharm{},
735
778
                        upgradeCharm{revision: 1},
736
779
                        waitUnitAgent{
737
 
                                status: status.StatusIdle,
 
780
                                status: status.Idle,
738
781
                                charm:  1,
739
782
                        },
740
783
                        waitUnitAgent{
741
784
                                statusGetter: unitStatusGetter,
742
 
                                status:       status.StatusUnknown,
 
785
                                status:       status.Unknown,
743
786
                                charm:        1,
744
787
                        },
745
788
                        waitHooks{"upgrade-charm", "config-changed"},
799
842
                        upgradeCharm{revision: 1},
800
843
                        waitUnitAgent{
801
844
                                statusGetter: unitStatusGetter,
802
 
                                status:       status.StatusError,
 
845
                                status:       status.Error,
803
846
                                info:         `hook failed: "start"`,
804
847
                                data: map[string]interface{}{
805
848
                                        "hook": "start",
811
854
 
812
855
                        resolveError{state.ResolvedNoHooks},
813
856
                        waitUnitAgent{
814
 
                                status: status.StatusIdle,
 
857
                                status: status.Idle,
815
858
                                charm:  1,
816
859
                        },
817
860
                        waitUnitAgent{
818
861
                                statusGetter: unitStatusGetter,
819
 
                                status:       status.StatusMaintenance,
 
862
                                status:       status.Maintenance,
820
863
                                info:         "installing charm software",
821
864
                                charm:        1,
822
865
                        },
840
883
                        // useful to wait until that point...
841
884
                        waitUnitAgent{
842
885
                                statusGetter: unitStatusGetter,
843
 
                                status:       status.StatusError,
 
886
                                status:       status.Error,
844
887
                                info:         `hook failed: "start"`,
845
888
                                data: map[string]interface{}{
846
889
                                        "hook": "start",
856
899
 
857
900
                        resolveError{state.ResolvedNoHooks},
858
901
                        waitUnitAgent{
859
 
                                status: status.StatusIdle,
 
902
                                status: status.Idle,
860
903
                                charm:  1,
861
904
                        },
862
905
                        waitHooks{"config-changed"},
882
925
                        resolveError{state.ResolvedNoHooks},
883
926
                        waitHooks{"upgrade-charm", "config-changed"},
884
927
                        waitUnitAgent{
885
 
                                status: status.StatusIdle,
 
928
                                status: status.Idle,
886
929
                                charm:  1,
887
930
                        },
888
931
                        waitUnitAgent{
889
932
                                statusGetter: unitStatusGetter,
890
 
                                status:       status.StatusUnknown,
 
933
                                status:       status.Unknown,
891
934
                                charm:        1,
892
935
                        },
893
936
                        verifyCharm{revision: 1},
902
945
                        upgradeCharm{revision: 2, forced: true},
903
946
                        waitHooks{"upgrade-charm", "config-changed"},
904
947
                        waitUnitAgent{
905
 
                                status: status.StatusIdle,
 
948
                                status: status.Idle,
906
949
                                charm:  2,
907
950
                        },
908
951
                        waitUnitAgent{
909
952
                                statusGetter: unitStatusGetter,
910
 
                                status:       status.StatusUnknown,
 
953
                                status:       status.Unknown,
911
954
                                charm:        2,
912
955
                        },
913
956
                        verifyCharm{revision: 2},
1048
1091
                        serveCharm{},
1049
1092
                        createUniter{},
1050
1093
                        waitUnitAgent{
1051
 
                                status: status.StatusIdle,
 
1094
                                status: status.Idle,
1052
1095
                        },
1053
1096
                        waitUnitAgent{
1054
1097
                                statusGetter: unitStatusGetter,
1055
 
                                status:       status.StatusUnknown,
 
1098
                                status:       status.Unknown,
1056
1099
                        },
1057
1100
                        waitHooks{"install", "leader-elected", "config-changed", "start"},
1058
1101
                        addRelation{waitJoin: true},
1089
1132
                        startupRelationError{"db-relation-joined"},
1090
1133
                        waitUnitAgent{
1091
1134
                                statusGetter: unitStatusGetter,
1092
 
                                status:       status.StatusError,
 
1135
                                status:       status.Error,
1093
1136
                                info:         `hook failed: "db-relation-joined"`,
1094
1137
                                data: map[string]interface{}{
1095
1138
                                        "hook":        "db-relation-joined",
1102
1145
                        startupRelationError{"db-relation-changed"},
1103
1146
                        waitUnitAgent{
1104
1147
                                statusGetter: unitStatusGetter,
1105
 
                                status:       status.StatusError,
 
1148
                                status:       status.Error,
1106
1149
                                info:         `hook failed: "db-relation-changed"`,
1107
1150
                                data: map[string]interface{}{
1108
1151
                                        "hook":        "db-relation-changed",
1117
1160
                        removeRelationUnit{"mysql/0"},
1118
1161
                        waitUnitAgent{
1119
1162
                                statusGetter: unitStatusGetter,
1120
 
                                status:       status.StatusError,
 
1163
                                status:       status.Error,
1121
1164
                                info:         `hook failed: "db-relation-departed"`,
1122
1165
                                data: map[string]interface{}{
1123
1166
                                        "hook":        "db-relation-departed",
1133
1176
                        relationDying,
1134
1177
                        waitUnitAgent{
1135
1178
                                statusGetter: unitStatusGetter,
1136
 
                                status:       status.StatusError,
 
1179
                                status:       status.Error,
1137
1180
                                info:         `hook failed: "db-relation-broken"`,
1138
1181
                                data: map[string]interface{}{
1139
1182
                                        "hook":        "db-relation-broken",
1159
1202
                        createServiceAndUnit{},
1160
1203
                        startUniter{},
1161
1204
                        waitAddresses{},
1162
 
                        waitUnitAgent{status: status.StatusIdle},
 
1205
                        waitUnitAgent{status: status.Idle},
1163
1206
                        waitUnitAgent{
1164
1207
                                statusGetter: unitStatusGetter,
1165
 
                                status:       status.StatusUnknown,
 
1208
                                status:       status.Unknown,
1166
1209
                        },
1167
1210
                        waitHooks{"install", "leader-elected", "config-changed", "start"},
1168
1211
                        verifyCharm{},
1172
1215
                                results: map[string]interface{}{},
1173
1216
                                status:  params.ActionCompleted,
1174
1217
                        }}},
1175
 
                        waitUnitAgent{status: status.StatusIdle},
 
1218
                        waitUnitAgent{status: status.Idle},
1176
1219
                        waitUnitAgent{
1177
1220
                                statusGetter: unitStatusGetter,
1178
 
                                status:       status.StatusUnknown,
 
1221
                                status:       status.Unknown,
1179
1222
                        },
1180
1223
                ), ut(
1181
1224
                        "action-fail causes the action to fail with a message",
1190
1233
                        createServiceAndUnit{},
1191
1234
                        startUniter{},
1192
1235
                        waitAddresses{},
1193
 
                        waitUnitAgent{status: status.StatusIdle},
 
1236
                        waitUnitAgent{status: status.Idle},
1194
1237
                        waitUnitAgent{
1195
1238
                                statusGetter: unitStatusGetter,
1196
 
                                status:       status.StatusUnknown,
 
1239
                                status:       status.Unknown,
1197
1240
                        },
1198
1241
                        waitHooks{"install", "leader-elected", "config-changed", "start"},
1199
1242
                        verifyCharm{},
1206
1249
                                message: "I'm afraid I can't let you do that, Dave.",
1207
1250
                                status:  params.ActionFailed,
1208
1251
                        }}},
1209
 
                        waitUnitAgent{status: status.StatusIdle}, waitUnitAgent{
 
1252
                        waitUnitAgent{status: status.Idle}, waitUnitAgent{
1210
1253
                                statusGetter: unitStatusGetter,
1211
 
                                status:       status.StatusUnknown,
 
1254
                                status:       status.Unknown,
1212
1255
                        },
1213
1256
                ), ut(
1214
1257
                        "action-fail with the wrong arguments fails but is not an error",
1223
1266
                        createServiceAndUnit{},
1224
1267
                        startUniter{},
1225
1268
                        waitAddresses{},
1226
 
                        waitUnitAgent{status: status.StatusIdle},
 
1269
                        waitUnitAgent{status: status.Idle},
1227
1270
                        waitUnitAgent{
1228
1271
                                statusGetter: unitStatusGetter,
1229
 
                                status:       status.StatusUnknown,
 
1272
                                status:       status.Unknown,
1230
1273
                        },
1231
1274
                        waitHooks{"install", "leader-elected", "config-changed", "start"},
1232
1275
                        verifyCharm{},
1239
1282
                                message: "A real message",
1240
1283
                                status:  params.ActionFailed,
1241
1284
                        }}},
1242
 
                        waitUnitAgent{status: status.StatusIdle},
 
1285
                        waitUnitAgent{status: status.Idle},
1243
1286
                        waitUnitAgent{
1244
1287
                                statusGetter: unitStatusGetter,
1245
 
                                status:       status.StatusUnknown,
 
1288
                                status:       status.Unknown,
1246
1289
                        },
1247
1290
                ), ut(
1248
1291
                        "actions with correct params passed are not an error",
1257
1300
                        createServiceAndUnit{},
1258
1301
                        startUniter{},
1259
1302
                        waitAddresses{},
1260
 
                        waitUnitAgent{status: status.StatusIdle},
 
1303
                        waitUnitAgent{status: status.Idle},
1261
1304
                        waitUnitAgent{
1262
1305
                                statusGetter: unitStatusGetter,
1263
 
                                status:       status.StatusUnknown,
 
1306
                                status:       status.Unknown,
1264
1307
                        },
1265
1308
                        waitHooks{"install", "leader-elected", "config-changed", "start"},
1266
1309
                        verifyCharm{},
1282
1325
                                },
1283
1326
                                status: params.ActionCompleted,
1284
1327
                        }}},
1285
 
                        waitUnitAgent{status: status.StatusIdle},
 
1328
                        waitUnitAgent{status: status.Idle},
1286
1329
                        waitUnitAgent{
1287
1330
                                statusGetter: unitStatusGetter,
1288
 
                                status:       status.StatusUnknown,
 
1331
                                status:       status.Unknown,
1289
1332
                        },
1290
1333
                ), ut(
1291
1334
                        "actions with incorrect params passed are not an error but fail",
1300
1343
                        createServiceAndUnit{},
1301
1344
                        startUniter{},
1302
1345
                        waitAddresses{},
1303
 
                        waitUnitAgent{status: status.StatusIdle},
 
1346
                        waitUnitAgent{status: status.Idle},
1304
1347
                        waitUnitAgent{
1305
1348
                                statusGetter: unitStatusGetter,
1306
 
                                status:       status.StatusUnknown,
 
1349
                                status:       status.Unknown,
1307
1350
                        },
1308
1351
                        waitHooks{"install", "leader-elected", "config-changed", "start"},
1309
1352
                        verifyCharm{},
1317
1360
                                status:  params.ActionFailed,
1318
1361
                                message: `cannot run "snapshot" action: validation failed: (root).outfile : must be of type string, given 2`,
1319
1362
                        }}},
1320
 
                        waitUnitAgent{status: status.StatusIdle},
 
1363
                        waitUnitAgent{status: status.Idle},
1321
1364
                        waitUnitAgent{
1322
1365
                                statusGetter: unitStatusGetter,
1323
 
                                status:       status.StatusUnknown,
 
1366
                                status:       status.Unknown,
1324
1367
                        },
1325
1368
                ), ut(
1326
1369
                        "actions not defined in actions.yaml fail without causing a uniter error",
1334
1377
                        createServiceAndUnit{},
1335
1378
                        startUniter{},
1336
1379
                        waitAddresses{},
1337
 
                        waitUnitAgent{status: status.StatusIdle},
 
1380
                        waitUnitAgent{status: status.Idle},
1338
1381
                        waitUnitAgent{
1339
1382
                                statusGetter: unitStatusGetter,
1340
 
                                status:       status.StatusUnknown,
 
1383
                                status:       status.Unknown,
1341
1384
                        },
1342
1385
                        waitHooks{"install", "leader-elected", "config-changed", "start"},
1343
1386
                        verifyCharm{},
1348
1391
                                status:  params.ActionFailed,
1349
1392
                                message: `cannot run "snapshot" action: not defined`,
1350
1393
                        }}},
1351
 
                        waitUnitAgent{status: status.StatusIdle},
 
1394
                        waitUnitAgent{status: status.Idle},
1352
1395
                        waitUnitAgent{
1353
1396
                                statusGetter: unitStatusGetter,
1354
 
                                status:       status.StatusUnknown,
 
1397
                                status:       status.Unknown,
1355
1398
                        },
1356
1399
                ), ut(
1357
1400
                        "pending actions get consumed",
1369
1412
                        addAction{"action-log", nil},
1370
1413
                        startUniter{},
1371
1414
                        waitAddresses{},
1372
 
                        waitUnitAgent{status: status.StatusIdle},
 
1415
                        waitUnitAgent{status: status.Idle},
1373
1416
                        waitUnitAgent{
1374
1417
                                statusGetter: unitStatusGetter,
1375
 
                                status:       status.StatusUnknown,
 
1418
                                status:       status.Unknown,
1376
1419
                        },
1377
1420
                        waitHooks{"install", "leader-elected", "config-changed", "start"},
1378
1421
                        verifyCharm{},
1389
1432
                                results: map[string]interface{}{},
1390
1433
                                status:  params.ActionCompleted,
1391
1434
                        }}},
1392
 
                        waitUnitAgent{status: status.StatusIdle},
 
1435
                        waitUnitAgent{status: status.Idle},
1393
1436
                        waitUnitAgent{
1394
1437
                                statusGetter: unitStatusGetter,
1395
 
                                status:       status.StatusUnknown,
 
1438
                                status:       status.Unknown,
1396
1439
                        },
1397
1440
                ), ut(
1398
1441
                        "actions not implemented fail but are not errors",
1406
1449
                        createServiceAndUnit{},
1407
1450
                        startUniter{},
1408
1451
                        waitAddresses{},
1409
 
                        waitUnitAgent{status: status.StatusIdle},
 
1452
                        waitUnitAgent{status: status.Idle},
1410
1453
                        waitUnitAgent{
1411
1454
                                statusGetter: unitStatusGetter,
1412
 
                                status:       status.StatusUnknown,
 
1455
                                status:       status.Unknown,
1413
1456
                        },
1414
1457
                        waitHooks{"install", "leader-elected", "config-changed", "start"},
1415
1458
                        verifyCharm{},
1420
1463
                                status:  params.ActionFailed,
1421
1464
                                message: `action not implemented on unit "u/0"`,
1422
1465
                        }}},
1423
 
                        waitUnitAgent{status: status.StatusIdle},
 
1466
                        waitUnitAgent{status: status.Idle},
1424
1467
                        waitUnitAgent{
1425
1468
                                statusGetter: unitStatusGetter,
1426
 
                                status:       status.StatusUnknown,
 
1469
                                status:       status.Unknown,
1427
1470
                        },
1428
1471
                ), ut(
1429
1472
                        "actions may run from ModeHookError, but do not clear the error",
1437
1480
                        addAction{"action-log", nil},
1438
1481
                        waitUnitAgent{
1439
1482
                                statusGetter: unitStatusGetter,
1440
 
                                status:       status.StatusError,
 
1483
                                status:       status.Error,
1441
1484
                                info:         `hook failed: "start"`,
1442
 
                                data: map[string]interface{}{
1443
 
                                        "hook": "start",
1444
 
                                },
 
1485
                                data:         map[string]interface{}{"hook": "start"},
1445
1486
                        },
1446
1487
                        waitActionResults{[]actionResult{{
1447
1488
                                name:    "action-log",
1450
1491
                        }}},
1451
1492
                        waitUnitAgent{
1452
1493
                                statusGetter: unitStatusGetter,
1453
 
                                status:       status.StatusError,
 
1494
                                status:       status.Error,
1454
1495
                                info:         `hook failed: "start"`,
1455
1496
                                data:         map[string]interface{}{"hook": "start"},
1456
1497
                        },
1457
1498
                        verifyWaiting{},
1458
1499
                        resolveError{state.ResolvedNoHooks},
1459
 
                        waitUnitAgent{status: status.StatusIdle},
 
1500
                        waitUnitAgent{status: status.Idle},
1460
1501
                        waitUnitAgent{
1461
1502
                                statusGetter: unitStatusGetter,
1462
 
                                status:       status.StatusMaintenance,
 
1503
                                status:       status.Maintenance,
1463
1504
                                info:         "installing charm software",
1464
1505
                        },
1465
1506
                ),
1566
1607
                        startUniter{},
1567
1608
                        waitAddresses{},
1568
1609
                        waitUnitAgent{
1569
 
                                status: status.StatusIdle,
 
1610
                                status: status.Idle,
1570
1611
                        },
1571
1612
                        waitUnitAgent{
1572
1613
                                statusGetter: unitStatusGetter,
1573
 
                                status:       status.StatusUnknown,
 
1614
                                status:       status.Unknown,
1574
1615
                        },
1575
1616
                        waitActionResults{[]actionResult{{
1576
1617
                                name: "action-reboot",
1602
1643
                        waitHooks{"install"},
1603
1644
                        startUniter{},
1604
1645
                        waitUnitAgent{
1605
 
                                status: status.StatusIdle,
 
1646
                                status: status.Idle,
1606
1647
                        },
1607
1648
                        waitUnitAgent{
1608
1649
                                statusGetter: unitStatusGetter,
1609
 
                                status:       status.StatusUnknown,
 
1650
                                status:       status.Unknown,
1610
1651
                        },
1611
1652
                        waitHooks{"leader-elected", "config-changed", "start"},
1612
1653
                )})
1631
1672
                        waitHooks{"install"},
1632
1673
                        startUniter{},
1633
1674
                        waitUnitAgent{
1634
 
                                status: status.StatusIdle,
 
1675
                                status: status.Idle,
1635
1676
                        },
1636
1677
                        waitUnitAgent{
1637
1678
                                statusGetter: unitStatusGetter,
1638
 
                                status:       status.StatusUnknown,
 
1679
                                status:       status.Unknown,
1639
1680
                        },
1640
1681
                        waitHooks{"install", "leader-elected", "config-changed", "start"},
1641
1682
                )})
1658
1699
                        waitAddresses{},
1659
1700
                        waitUnitAgent{
1660
1701
                                statusGetter: unitStatusGetter,
1661
 
                                status:       status.StatusError,
 
1702
                                status:       status.Error,
1662
1703
                                info:         fmt.Sprintf(`hook failed: "install"`),
1663
1704
                        },
1664
1705
                ),
1674
1715
                        createUniter{},
1675
1716
                        waitUnitAgent{
1676
1717
                                statusGetter: unitStatusGetter,
1677
 
                                status:       status.StatusError,
 
1718
                                status:       status.Error,
1678
1719
                                info:         `hook failed: "config-changed"`,
1679
1720
                                data: map[string]interface{}{
1680
1721
                                        "hook": "config-changed",
1683
1724
                        runCommands{"exit 0"},
1684
1725
                        waitUnitAgent{
1685
1726
                                statusGetter: unitStatusGetter,
1686
 
                                status:       status.StatusError,
 
1727
                                status:       status.Error,
1687
1728
                                info:         `hook failed: "config-changed"`,
1688
1729
                                data: map[string]interface{}{
1689
1730
                                        "hook": "config-changed",
1898
1939
                        serveCharm{},
1899
1940
                        createUniter{executorFunc: executorFunc},
1900
1941
                        waitUnitAgent{
1901
 
                                status: status.StatusFailed,
 
1942
                                status: status.Failed,
1902
1943
                                info:   "resolver loop error",
1903
1944
                        },
1904
1945
                        expectError{".*some error occurred.*"},