~ubuntu-branches/ubuntu/trusty/juju-core/trusty-proposed

« back to all changes in this revision

Viewing changes to src/launchpad.net/juju-core/cmd/juju/status_test.go

  • Committer: Package Import Robot
  • Author(s): James Page
  • Date: 2014-01-29 11:40:20 UTC
  • mfrom: (23.1.1 trusty-proposed)
  • Revision ID: package-import@ubuntu.com-20140129114020-ejieitm8smtt5vln
Tags: 1.17.1-0ubuntu2
d/tests/local-provider: Don't fail tests if ~/.juju is present as its
created by the juju version command. 

Show diffs side-by-side

added added

removed removed

Lines of Context:
192
192
                "hardware":    "arch=amd64 cpu-cores=1 mem=1024M root-disk=8192M",
193
193
        }
194
194
        unexposedService = M{
195
 
                "charm":   "local:quantal/dummy-1",
 
195
                "charm":   "cs:quantal/dummy-1",
196
196
                "exposed": false,
197
197
        }
198
198
        exposedService = M{
199
 
                "charm":   "local:quantal/dummy-1",
 
199
                "charm":   "cs:quantal/dummy-1",
200
200
                "exposed": true,
201
201
        }
202
202
)
247
247
                },
248
248
 
249
249
                startAliveMachine{"0"},
 
250
                setAddresses{"0", []instance.Address{
 
251
                        instance.NewAddress("10.0.0.1"),
 
252
                        instance.NewAddress("dummyenv-0.dns"),
 
253
                }},
250
254
                expect{
251
255
                        "simulate the PA starting an instance in response to the state change",
252
256
                        M{
297
301
        ), test(
298
302
                "instance with different hardware characteristics",
299
303
                addMachine{"0", machineCons, state.JobManageEnviron},
 
304
                setAddresses{"0", []instance.Address{
 
305
                        instance.NewAddress("10.0.0.1"),
 
306
                        instance.NewAddress("dummyenv-0.dns"),
 
307
                }},
300
308
                startAliveMachine{"0"},
301
309
                setMachineStatus{"0", params.StatusStarted, ""},
302
310
                expect{
316
324
                        },
317
325
                },
318
326
        ), test(
 
327
                "instance without addresses",
 
328
                addMachine{"0", machineCons, state.JobManageEnviron},
 
329
                startAliveMachine{"0"},
 
330
                setMachineStatus{"0", params.StatusStarted, ""},
 
331
                expect{
 
332
                        "machine 0 has no dns-name",
 
333
                        M{
 
334
                                "environment": "dummyenv",
 
335
                                "machines": M{
 
336
                                        "0": M{
 
337
                                                "agent-state": "started",
 
338
                                                "instance-id": "dummyenv-0",
 
339
                                                "series":      "quantal",
 
340
                                                "hardware":    "arch=amd64 cpu-cores=2 mem=8192M root-disk=8192M",
 
341
                                        },
 
342
                                },
 
343
                                "services": M{},
 
344
                        },
 
345
                },
 
346
        ), test(
319
347
                "test pending and missing machines",
320
348
                addMachine{machineId: "0", job: state.JobManageEnviron},
321
349
                expect{
352
380
        ), test(
353
381
                "add two services and expose one, then add 2 more machines and some units",
354
382
                addMachine{machineId: "0", job: state.JobManageEnviron},
 
383
                setAddresses{"0", []instance.Address{instance.NewAddress("dummyenv-0.dns")}},
355
384
                startAliveMachine{"0"},
356
385
                setMachineStatus{"0", params.StatusStarted, ""},
357
386
                addCharm{"dummy"},
387
416
                },
388
417
 
389
418
                addMachine{machineId: "1", job: state.JobHostUnits},
 
419
                setAddresses{"1", []instance.Address{instance.NewAddress("dummyenv-1.dns")}},
390
420
                startAliveMachine{"1"},
391
421
                setMachineStatus{"1", params.StatusStarted, ""},
392
422
                addMachine{machineId: "2", job: state.JobHostUnits},
 
423
                setAddresses{"2", []instance.Address{instance.NewAddress("dummyenv-2.dns")}},
393
424
                startAliveMachine{"2"},
394
425
                setMachineStatus{"2", params.StatusStarted, ""},
395
426
                expect{
430
461
                                },
431
462
                                "services": M{
432
463
                                        "exposed-service": M{
433
 
                                                "charm":   "local:quantal/dummy-1",
 
464
                                                "charm":   "cs:quantal/dummy-1",
434
465
                                                "exposed": true,
435
466
                                                "units": M{
436
467
                                                        "exposed-service/0": M{
440
471
                                                                "open-ports": L{
441
472
                                                                        "2/tcp", "3/tcp", "2/udp", "10/udp",
442
473
                                                                },
 
474
                                                                "public-address": "dummyenv-2.dns",
443
475
                                                        },
444
476
                                                },
445
477
                                        },
446
478
                                        "dummy-service": M{
447
 
                                                "charm":   "local:quantal/dummy-1",
 
479
                                                "charm":   "cs:quantal/dummy-1",
448
480
                                                "exposed": false,
449
481
                                                "units": M{
450
482
                                                        "dummy-service/0": M{
451
483
                                                                "machine":          "1",
452
484
                                                                "agent-state":      "down",
453
485
                                                                "agent-state-info": "(started)",
 
486
                                                                "public-address":   "dummyenv-1.dns",
454
487
                                                        },
455
488
                                                },
456
489
                                        },
461
494
                addMachine{machineId: "3", job: state.JobHostUnits},
462
495
                startMachine{"3"},
463
496
                // Simulate some status with info, while the agent is down.
 
497
                setAddresses{"3", []instance.Address{instance.NewAddress("dummyenv-3.dns")}},
464
498
                setMachineStatus{"3", params.StatusStopped, "Really?"},
465
499
                addMachine{machineId: "4", job: state.JobHostUnits},
 
500
                setAddresses{"4", []instance.Address{instance.NewAddress("dummyenv-4.dns")}},
466
501
                startAliveMachine{"4"},
467
502
                setMachineStatus{"4", params.StatusError, "Beware the red toys"},
468
503
                ensureDyingUnit{"dummy-service/0"},
500
535
                                },
501
536
                                "services": M{
502
537
                                        "exposed-service": M{
503
 
                                                "charm":   "local:quantal/dummy-1",
 
538
                                                "charm":   "cs:quantal/dummy-1",
504
539
                                                "exposed": true,
505
540
                                                "units": M{
506
541
                                                        "exposed-service/0": M{
510
545
                                                                "open-ports": L{
511
546
                                                                        "2/tcp", "3/tcp", "2/udp", "10/udp",
512
547
                                                                },
 
548
                                                                "public-address": "dummyenv-2.dns",
513
549
                                                        },
514
550
                                                },
515
551
                                        },
516
552
                                        "dummy-service": M{
517
 
                                                "charm":   "local:quantal/dummy-1",
 
553
                                                "charm":   "cs:quantal/dummy-1",
518
554
                                                "exposed": false,
519
555
                                                "units": M{
520
556
                                                        "dummy-service/0": M{
522
558
                                                                "life":             "dying",
523
559
                                                                "agent-state":      "down",
524
560
                                                                "agent-state-info": "(started)",
 
561
                                                                "public-address":   "dummyenv-1.dns",
525
562
                                                        },
526
563
                                                },
527
564
                                        },
539
576
                                },
540
577
                                "services": M{
541
578
                                        "dummy-service": M{
542
 
                                                "charm":   "local:quantal/dummy-1",
 
579
                                                "charm":   "cs:quantal/dummy-1",
543
580
                                                "exposed": false,
544
581
                                                "units": M{
545
582
                                                        "dummy-service/0": M{
547
584
                                                                "life":             "dying",
548
585
                                                                "agent-state":      "down",
549
586
                                                                "agent-state-info": "(started)",
 
587
                                                                "public-address":   "dummyenv-1.dns",
550
588
                                                        },
551
589
                                                },
552
590
                                        },
563
601
                                },
564
602
                                "services": M{
565
603
                                        "exposed-service": M{
566
 
                                                "charm":   "local:quantal/dummy-1",
 
604
                                                "charm":   "cs:quantal/dummy-1",
567
605
                                                "exposed": true,
568
606
                                                "units": M{
569
607
                                                        "exposed-service/0": M{
573
611
                                                                "open-ports": L{
574
612
                                                                        "2/tcp", "3/tcp", "2/udp", "10/udp",
575
613
                                                                },
 
614
                                                                "public-address": "dummyenv-2.dns",
576
615
                                                        },
577
616
                                                },
578
617
                                        },
589
628
                                },
590
629
                                "services": M{
591
630
                                        "dummy-service": M{
592
 
                                                "charm":   "local:quantal/dummy-1",
 
631
                                                "charm":   "cs:quantal/dummy-1",
593
632
                                                "exposed": false,
594
633
                                                "units": M{
595
634
                                                        "dummy-service/0": M{
597
636
                                                                "life":             "dying",
598
637
                                                                "agent-state":      "down",
599
638
                                                                "agent-state-info": "(started)",
 
639
                                                                "public-address":   "dummyenv-1.dns",
600
640
                                                        },
601
641
                                                },
602
642
                                        },
613
653
                                },
614
654
                                "services": M{
615
655
                                        "exposed-service": M{
616
 
                                                "charm":   "local:quantal/dummy-1",
 
656
                                                "charm":   "cs:quantal/dummy-1",
617
657
                                                "exposed": true,
618
658
                                                "units": M{
619
659
                                                        "exposed-service/0": M{
623
663
                                                                "open-ports": L{
624
664
                                                                        "2/tcp", "3/tcp", "2/udp", "10/udp",
625
665
                                                                },
 
666
                                                                "public-address": "dummyenv-2.dns",
626
667
                                                        },
627
668
                                                },
628
669
                                        },
640
681
                                },
641
682
                                "services": M{
642
683
                                        "dummy-service": M{
643
 
                                                "charm":   "local:quantal/dummy-1",
 
684
                                                "charm":   "cs:quantal/dummy-1",
644
685
                                                "exposed": false,
645
686
                                                "units": M{
646
687
                                                        "dummy-service/0": M{
648
689
                                                                "life":             "dying",
649
690
                                                                "agent-state":      "down",
650
691
                                                                "agent-state-info": "(started)",
 
692
                                                                "public-address":   "dummyenv-1.dns",
651
693
                                                        },
652
694
                                                },
653
695
                                        },
654
696
                                        "exposed-service": M{
655
 
                                                "charm":   "local:quantal/dummy-1",
 
697
                                                "charm":   "cs:quantal/dummy-1",
656
698
                                                "exposed": true,
657
699
                                                "units": M{
658
700
                                                        "exposed-service/0": M{
662
704
                                                                "open-ports": L{
663
705
                                                                        "2/tcp", "3/tcp", "2/udp", "10/udp",
664
706
                                                                },
 
707
                                                                "public-address": "dummyenv-2.dns",
665
708
                                                        },
666
709
                                                },
667
710
                                        },
688
731
                                },
689
732
                                "services": M{
690
733
                                        "dummy-service": M{
691
 
                                                "charm":   "local:quantal/dummy-1",
 
734
                                                "charm":   "cs:quantal/dummy-1",
692
735
                                                "exposed": false,
693
736
                                                "life":    "dying",
694
737
                                                "units": M{
707
750
        test(
708
751
                "complex scenario with multiple related services",
709
752
                addMachine{machineId: "0", job: state.JobManageEnviron},
 
753
                setAddresses{"0", []instance.Address{instance.NewAddress("dummyenv-0.dns")}},
710
754
                startAliveMachine{"0"},
711
755
                setMachineStatus{"0", params.StatusStarted, ""},
712
756
                addCharm{"wordpress"},
716
760
                addService{"project", "wordpress"},
717
761
                setServiceExposed{"project", true},
718
762
                addMachine{machineId: "1", job: state.JobHostUnits},
 
763
                setAddresses{"1", []instance.Address{instance.NewAddress("dummyenv-1.dns")}},
719
764
                startAliveMachine{"1"},
720
765
                setMachineStatus{"1", params.StatusStarted, ""},
721
766
                addAliveUnit{"project", "1"},
724
769
                addService{"mysql", "mysql"},
725
770
                setServiceExposed{"mysql", true},
726
771
                addMachine{machineId: "2", job: state.JobHostUnits},
 
772
                setAddresses{"2", []instance.Address{instance.NewAddress("dummyenv-2.dns")}},
727
773
                startAliveMachine{"2"},
728
774
                setMachineStatus{"2", params.StatusStarted, ""},
729
775
                addAliveUnit{"mysql", "2"},
732
778
                addService{"varnish", "varnish"},
733
779
                setServiceExposed{"varnish", true},
734
780
                addMachine{machineId: "3", job: state.JobHostUnits},
 
781
                setAddresses{"3", []instance.Address{instance.NewAddress("dummyenv-3.dns")}},
735
782
                startAliveMachine{"3"},
736
783
                setMachineStatus{"3", params.StatusStarted, ""},
737
784
                addUnit{"varnish", "3"},
739
786
                addService{"private", "wordpress"},
740
787
                setServiceExposed{"private", true},
741
788
                addMachine{machineId: "4", job: state.JobHostUnits},
 
789
                setAddresses{"4", []instance.Address{instance.NewAddress("dummyenv-4.dns")}},
742
790
                startAliveMachine{"4"},
743
791
                setMachineStatus{"4", params.StatusStarted, ""},
744
792
                addUnit{"private", "4"},
760
808
                                },
761
809
                                "services": M{
762
810
                                        "project": M{
763
 
                                                "charm":   "local:quantal/wordpress-3",
 
811
                                                "charm":   "cs:quantal/wordpress-3",
764
812
                                                "exposed": true,
765
813
                                                "units": M{
766
814
                                                        "project/0": M{
767
 
                                                                "machine":     "1",
768
 
                                                                "agent-state": "started",
 
815
                                                                "machine":        "1",
 
816
                                                                "agent-state":    "started",
 
817
                                                                "public-address": "dummyenv-1.dns",
769
818
                                                        },
770
819
                                                },
771
820
                                                "relations": M{
774
823
                                                },
775
824
                                        },
776
825
                                        "mysql": M{
777
 
                                                "charm":   "local:quantal/mysql-1",
 
826
                                                "charm":   "cs:quantal/mysql-1",
778
827
                                                "exposed": true,
779
828
                                                "units": M{
780
829
                                                        "mysql/0": M{
781
 
                                                                "machine":     "2",
782
 
                                                                "agent-state": "started",
 
830
                                                                "machine":        "2",
 
831
                                                                "agent-state":    "started",
 
832
                                                                "public-address": "dummyenv-2.dns",
783
833
                                                        },
784
834
                                                },
785
835
                                                "relations": M{
787
837
                                                },
788
838
                                        },
789
839
                                        "varnish": M{
790
 
                                                "charm":   "local:quantal/varnish-1",
 
840
                                                "charm":   "cs:quantal/varnish-1",
791
841
                                                "exposed": true,
792
842
                                                "units": M{
793
843
                                                        "varnish/0": M{
794
 
                                                                "machine":     "3",
795
 
                                                                "agent-state": "pending",
 
844
                                                                "machine":        "3",
 
845
                                                                "agent-state":    "pending",
 
846
                                                                "public-address": "dummyenv-3.dns",
796
847
                                                        },
797
848
                                                },
798
849
                                                "relations": M{
800
851
                                                },
801
852
                                        },
802
853
                                        "private": M{
803
 
                                                "charm":   "local:quantal/wordpress-3",
 
854
                                                "charm":   "cs:quantal/wordpress-3",
804
855
                                                "exposed": true,
805
856
                                                "units": M{
806
857
                                                        "private/0": M{
807
 
                                                                "machine":     "4",
808
 
                                                                "agent-state": "pending",
 
858
                                                                "machine":        "4",
 
859
                                                                "agent-state":    "pending",
 
860
                                                                "public-address": "dummyenv-4.dns",
809
861
                                                        },
810
862
                                                },
811
863
                                                "relations": M{
818
870
        ), test(
819
871
                "simple peer scenario",
820
872
                addMachine{machineId: "0", job: state.JobManageEnviron},
 
873
                setAddresses{"0", []instance.Address{instance.NewAddress("dummyenv-0.dns")}},
821
874
                startAliveMachine{"0"},
822
875
                setMachineStatus{"0", params.StatusStarted, ""},
823
876
                addCharm{"riak"},
826
879
                addService{"riak", "riak"},
827
880
                setServiceExposed{"riak", true},
828
881
                addMachine{machineId: "1", job: state.JobHostUnits},
 
882
                setAddresses{"1", []instance.Address{instance.NewAddress("dummyenv-1.dns")}},
829
883
                startAliveMachine{"1"},
830
884
                setMachineStatus{"1", params.StatusStarted, ""},
831
885
                addAliveUnit{"riak", "1"},
832
886
                setUnitStatus{"riak/0", params.StatusStarted, ""},
833
887
                addMachine{machineId: "2", job: state.JobHostUnits},
 
888
                setAddresses{"2", []instance.Address{instance.NewAddress("dummyenv-2.dns")}},
834
889
                startAliveMachine{"2"},
835
890
                setMachineStatus{"2", params.StatusStarted, ""},
836
891
                addAliveUnit{"riak", "2"},
837
892
                setUnitStatus{"riak/1", params.StatusStarted, ""},
838
893
                addMachine{machineId: "3", job: state.JobHostUnits},
 
894
                setAddresses{"3", []instance.Address{instance.NewAddress("dummyenv-3.dns")}},
839
895
                startAliveMachine{"3"},
840
896
                setMachineStatus{"3", params.StatusStarted, ""},
841
897
                addAliveUnit{"riak", "3"},
853
909
                                },
854
910
                                "services": M{
855
911
                                        "riak": M{
856
 
                                                "charm":   "local:quantal/riak-7",
 
912
                                                "charm":   "cs:quantal/riak-7",
857
913
                                                "exposed": true,
858
914
                                                "units": M{
859
915
                                                        "riak/0": M{
860
 
                                                                "machine":     "1",
861
 
                                                                "agent-state": "started",
 
916
                                                                "machine":        "1",
 
917
                                                                "agent-state":    "started",
 
918
                                                                "public-address": "dummyenv-1.dns",
862
919
                                                        },
863
920
                                                        "riak/1": M{
864
 
                                                                "machine":     "2",
865
 
                                                                "agent-state": "started",
 
921
                                                                "machine":        "2",
 
922
                                                                "agent-state":    "started",
 
923
                                                                "public-address": "dummyenv-2.dns",
866
924
                                                        },
867
925
                                                        "riak/2": M{
868
 
                                                                "machine":     "3",
869
 
                                                                "agent-state": "started",
 
926
                                                                "machine":        "3",
 
927
                                                                "agent-state":    "started",
 
928
                                                                "public-address": "dummyenv-3.dns",
870
929
                                                        },
871
930
                                                },
872
931
                                                "relations": M{
882
941
        test(
883
942
                "one service with one subordinate service",
884
943
                addMachine{machineId: "0", job: state.JobManageEnviron},
 
944
                setAddresses{"0", []instance.Address{instance.NewAddress("dummyenv-0.dns")}},
885
945
                startAliveMachine{"0"},
886
946
                setMachineStatus{"0", params.StatusStarted, ""},
887
947
                addCharm{"wordpress"},
891
951
                addService{"wordpress", "wordpress"},
892
952
                setServiceExposed{"wordpress", true},
893
953
                addMachine{machineId: "1", job: state.JobHostUnits},
 
954
                setAddresses{"1", []instance.Address{instance.NewAddress("dummyenv-1.dns")}},
894
955
                startAliveMachine{"1"},
895
956
                setMachineStatus{"1", params.StatusStarted, ""},
896
957
                addAliveUnit{"wordpress", "1"},
899
960
                addService{"mysql", "mysql"},
900
961
                setServiceExposed{"mysql", true},
901
962
                addMachine{machineId: "2", job: state.JobHostUnits},
 
963
                setAddresses{"2", []instance.Address{instance.NewAddress("dummyenv-2.dns")}},
902
964
                startAliveMachine{"2"},
903
965
                setMachineStatus{"2", params.StatusStarted, ""},
904
966
                addAliveUnit{"mysql", "2"},
929
991
                                },
930
992
                                "services": M{
931
993
                                        "wordpress": M{
932
 
                                                "charm":   "local:quantal/wordpress-3",
 
994
                                                "charm":   "cs:quantal/wordpress-3",
933
995
                                                "exposed": true,
934
996
                                                "units": M{
935
997
                                                        "wordpress/0": M{
940
1002
                                                                                "agent-state": "started",
941
1003
                                                                        },
942
1004
                                                                },
 
1005
                                                                "public-address": "dummyenv-1.dns",
943
1006
                                                        },
944
1007
                                                },
945
1008
                                                "relations": M{
948
1011
                                                },
949
1012
                                        },
950
1013
                                        "mysql": M{
951
 
                                                "charm":   "local:quantal/mysql-1",
 
1014
                                                "charm":   "cs:quantal/mysql-1",
952
1015
                                                "exposed": true,
953
1016
                                                "units": M{
954
1017
                                                        "mysql/0": M{
960
1023
                                                                                "agent-state-info": "somehow lost in all those logs",
961
1024
                                                                        },
962
1025
                                                                },
 
1026
                                                                "public-address": "dummyenv-2.dns",
963
1027
                                                        },
964
1028
                                                },
965
1029
                                                "relations": M{
968
1032
                                                },
969
1033
                                        },
970
1034
                                        "logging": M{
971
 
                                                "charm":   "local:quantal/logging-1",
 
1035
                                                "charm":   "cs:quantal/logging-1",
972
1036
                                                "exposed": true,
973
1037
                                                "relations": M{
974
1038
                                                        "logging-directory": L{"wordpress"},
992
1056
                                },
993
1057
                                "services": M{
994
1058
                                        "wordpress": M{
995
 
                                                "charm":   "local:quantal/wordpress-3",
 
1059
                                                "charm":   "cs:quantal/wordpress-3",
996
1060
                                                "exposed": true,
997
1061
                                                "units": M{
998
1062
                                                        "wordpress/0": M{
1003
1067
                                                                                "agent-state": "started",
1004
1068
                                                                        },
1005
1069
                                                                },
 
1070
                                                                "public-address": "dummyenv-1.dns",
1006
1071
                                                        },
1007
1072
                                                },
1008
1073
                                                "relations": M{
1011
1076
                                                },
1012
1077
                                        },
1013
1078
                                        "mysql": M{
1014
 
                                                "charm":   "local:quantal/mysql-1",
 
1079
                                                "charm":   "cs:quantal/mysql-1",
1015
1080
                                                "exposed": true,
1016
1081
                                                "units": M{
1017
1082
                                                        "mysql/0": M{
1023
1088
                                                                                "agent-state-info": "somehow lost in all those logs",
1024
1089
                                                                        },
1025
1090
                                                                },
 
1091
                                                                "public-address": "dummyenv-2.dns",
1026
1092
                                                        },
1027
1093
                                                },
1028
1094
                                                "relations": M{
1031
1097
                                                },
1032
1098
                                        },
1033
1099
                                        "logging": M{
1034
 
                                                "charm":   "local:quantal/logging-1",
 
1100
                                                "charm":   "cs:quantal/logging-1",
1035
1101
                                                "exposed": true,
1036
1102
                                                "relations": M{
1037
1103
                                                        "logging-directory": L{"wordpress"},
1054
1120
                                },
1055
1121
                                "services": M{
1056
1122
                                        "wordpress": M{
1057
 
                                                "charm":   "local:quantal/wordpress-3",
 
1123
                                                "charm":   "cs:quantal/wordpress-3",
1058
1124
                                                "exposed": true,
1059
1125
                                                "units": M{
1060
1126
                                                        "wordpress/0": M{
1065
1131
                                                                                "agent-state": "started",
1066
1132
                                                                        },
1067
1133
                                                                },
 
1134
                                                                "public-address": "dummyenv-1.dns",
1068
1135
                                                        },
1069
1136
                                                },
1070
1137
                                                "relations": M{
1073
1140
                                                },
1074
1141
                                        },
1075
1142
                                        "logging": M{
1076
 
                                                "charm":   "local:quantal/logging-1",
 
1143
                                                "charm":   "cs:quantal/logging-1",
1077
1144
                                                "exposed": true,
1078
1145
                                                "relations": M{
1079
1146
                                                        "logging-directory": L{"wordpress"},
1096
1163
                addService{"wordpress", "wordpress"},
1097
1164
                setServiceExposed{"wordpress", true},
1098
1165
                addMachine{machineId: "1", job: state.JobHostUnits},
 
1166
                setAddresses{"1", []instance.Address{instance.NewAddress("dummyenv-1.dns")}},
1099
1167
                startAliveMachine{"1"},
1100
1168
                setMachineStatus{"1", params.StatusStarted, ""},
1101
1169
                addAliveUnit{"wordpress", "1"},
1129
1197
                                },
1130
1198
                                "services": M{
1131
1199
                                        "wordpress": M{
1132
 
                                                "charm":   "local:quantal/wordpress-3",
 
1200
                                                "charm":   "cs:quantal/wordpress-3",
1133
1201
                                                "exposed": true,
1134
1202
                                                "units": M{
1135
1203
                                                        "wordpress/0": M{
1140
1208
                                                                                "agent-state": "started",
1141
1209
                                                                        },
1142
1210
                                                                },
 
1211
                                                                "public-address": "dummyenv-1.dns",
1143
1212
                                                        },
1144
1213
                                                },
1145
1214
                                                "relations": M{
1148
1217
                                                },
1149
1218
                                        },
1150
1219
                                        "monitoring": M{
1151
 
                                                "charm":   "local:quantal/monitoring-0",
 
1220
                                                "charm":   "cs:quantal/monitoring-0",
1152
1221
                                                "exposed": true,
1153
1222
                                                "relations": M{
1154
1223
                                                        "monitoring-port": L{"wordpress"},
1161
1230
        ), test(
1162
1231
                "machines with containers",
1163
1232
                addMachine{machineId: "0", job: state.JobManageEnviron},
 
1233
                setAddresses{"0", []instance.Address{instance.NewAddress("dummyenv-0.dns")}},
1164
1234
                startAliveMachine{"0"},
1165
1235
                setMachineStatus{"0", params.StatusStarted, ""},
1166
1236
                addCharm{"mysql"},
1168
1238
                setServiceExposed{"mysql", true},
1169
1239
 
1170
1240
                addMachine{machineId: "1", job: state.JobHostUnits},
 
1241
                setAddresses{"1", []instance.Address{instance.NewAddress("dummyenv-1.dns")}},
1171
1242
                startAliveMachine{"1"},
1172
1243
                setMachineStatus{"1", params.StatusStarted, ""},
1173
1244
                addAliveUnit{"mysql", "1"},
1175
1246
 
1176
1247
                // A container on machine 1.
1177
1248
                addContainer{"1", "1/lxc/0", state.JobHostUnits},
 
1249
                setAddresses{"1/lxc/0", []instance.Address{instance.NewAddress("dummyenv-2.dns")}},
1178
1250
                startAliveMachine{"1/lxc/0"},
1179
1251
                setMachineStatus{"1/lxc/0", params.StatusStarted, ""},
1180
1252
                addAliveUnit{"mysql", "1/lxc/0"},
1183
1255
 
1184
1256
                // A nested container.
1185
1257
                addContainer{"1/lxc/0", "1/lxc/0/lxc/0", state.JobHostUnits},
 
1258
                setAddresses{"1/lxc/0/lxc/0", []instance.Address{instance.NewAddress("dummyenv-3.dns")}},
1186
1259
                startAliveMachine{"1/lxc/0/lxc/0"},
1187
1260
                setMachineStatus{"1/lxc/0/lxc/0", params.StatusStarted, ""},
1188
1261
 
1196
1269
                                },
1197
1270
                                "services": M{
1198
1271
                                        "mysql": M{
1199
 
                                                "charm":   "local:quantal/mysql-1",
 
1272
                                                "charm":   "cs:quantal/mysql-1",
1200
1273
                                                "exposed": true,
1201
1274
                                                "units": M{
1202
1275
                                                        "mysql/0": M{
1203
 
                                                                "machine":     "1",
1204
 
                                                                "agent-state": "started",
 
1276
                                                                "machine":        "1",
 
1277
                                                                "agent-state":    "started",
 
1278
                                                                "public-address": "dummyenv-1.dns",
1205
1279
                                                        },
1206
1280
                                                        "mysql/1": M{
1207
 
                                                                "machine":     "1/lxc/0",
1208
 
                                                                "agent-state": "started",
 
1281
                                                                "machine":        "1/lxc/0",
 
1282
                                                                "agent-state":    "started",
 
1283
                                                                "public-address": "dummyenv-2.dns",
1209
1284
                                                        },
1210
1285
                                                },
1211
1286
                                        },
1224
1299
                                },
1225
1300
                                "services": M{
1226
1301
                                        "mysql": M{
1227
 
                                                "charm":   "local:quantal/mysql-1",
 
1302
                                                "charm":   "cs:quantal/mysql-1",
1228
1303
                                                "exposed": true,
1229
1304
                                                "units": M{
1230
1305
                                                        "mysql/1": M{
1231
 
                                                                "machine":     "1/lxc/0",
1232
 
                                                                "agent-state": "started",
 
1306
                                                                "machine":        "1/lxc/0",
 
1307
                                                                "agent-state":    "started",
 
1308
                                                                "public-address": "dummyenv-2.dns",
 
1309
                                                        },
 
1310
                                                },
 
1311
                                        },
 
1312
                                },
 
1313
                        },
 
1314
                },
 
1315
        ), test(
 
1316
                "service with out of date charm",
 
1317
                addMachine{machineId: "0", job: state.JobManageState},
 
1318
                setAddresses{"0", []instance.Address{instance.NewAddress("dummyenv-0.dns")}},
 
1319
                startAliveMachine{"0"},
 
1320
                setMachineStatus{"0", params.StatusStarted, ""},
 
1321
                addMachine{machineId: "1", job: state.JobHostUnits},
 
1322
                setAddresses{"1", []instance.Address{instance.NewAddress("dummyenv-1.dns")}},
 
1323
                startAliveMachine{"1"},
 
1324
                setMachineStatus{"1", params.StatusStarted, ""},
 
1325
                addCharm{"mysql"},
 
1326
                addService{"mysql", "mysql"},
 
1327
                setServiceExposed{"mysql", true},
 
1328
                addCharmPlaceholder{"mysql", 23},
 
1329
                addAliveUnit{"mysql", "1"},
 
1330
 
 
1331
                expect{
 
1332
                        "services and units with correct charm status",
 
1333
                        M{
 
1334
                                "environment": "dummyenv",
 
1335
                                "machines": M{
 
1336
                                        "0": machine0,
 
1337
                                        "1": machine1,
 
1338
                                },
 
1339
                                "services": M{
 
1340
                                        "mysql": M{
 
1341
                                                "charm":          "cs:quantal/mysql-1",
 
1342
                                                "can-upgrade-to": "cs:quantal/mysql-23",
 
1343
                                                "exposed":        true,
 
1344
                                                "units": M{
 
1345
                                                        "mysql/0": M{
 
1346
                                                                "machine":        "1",
 
1347
                                                                "agent-state":    "pending",
 
1348
                                                                "public-address": "dummyenv-1.dns",
 
1349
                                                        },
 
1350
                                                },
 
1351
                                        },
 
1352
                                },
 
1353
                        },
 
1354
                },
 
1355
        ), test(
 
1356
                "unit with out of date charm",
 
1357
                addMachine{machineId: "0", job: state.JobManageState},
 
1358
                setAddresses{"0", []instance.Address{instance.NewAddress("dummyenv-0.dns")}},
 
1359
                startAliveMachine{"0"},
 
1360
                setMachineStatus{"0", params.StatusStarted, ""},
 
1361
                addMachine{machineId: "1", job: state.JobHostUnits},
 
1362
                setAddresses{"1", []instance.Address{instance.NewAddress("dummyenv-1.dns")}},
 
1363
                startAliveMachine{"1"},
 
1364
                setMachineStatus{"1", params.StatusStarted, ""},
 
1365
                addCharm{"mysql"},
 
1366
                addService{"mysql", "mysql"},
 
1367
                setServiceExposed{"mysql", true},
 
1368
                addAliveUnit{"mysql", "1"},
 
1369
                setUnitCharmURL{"mysql/0", "cs:quantal/mysql-1"},
 
1370
                addCharmWithRevision{addCharm{"mysql"}, "local", 1},
 
1371
                setServiceCharm{"mysql", "local:quantal/mysql-1"},
 
1372
 
 
1373
                expect{
 
1374
                        "services and units with correct charm status",
 
1375
                        M{
 
1376
                                "environment": "dummyenv",
 
1377
                                "machines": M{
 
1378
                                        "0": machine0,
 
1379
                                        "1": machine1,
 
1380
                                },
 
1381
                                "services": M{
 
1382
                                        "mysql": M{
 
1383
                                                "charm":   "local:quantal/mysql-1",
 
1384
                                                "exposed": true,
 
1385
                                                "units": M{
 
1386
                                                        "mysql/0": M{
 
1387
                                                                "machine":        "1",
 
1388
                                                                "agent-state":    "started",
 
1389
                                                                "upgrading-from": "cs:quantal/mysql-1",
 
1390
                                                                "public-address": "dummyenv-1.dns",
 
1391
                                                        },
 
1392
                                                },
 
1393
                                        },
 
1394
                                },
 
1395
                        },
 
1396
                },
 
1397
        ), test(
 
1398
                "service and unit with out of date charms",
 
1399
                addMachine{machineId: "0", job: state.JobManageState},
 
1400
                setAddresses{"0", []instance.Address{instance.NewAddress("dummyenv-0.dns")}},
 
1401
                startAliveMachine{"0"},
 
1402
                setMachineStatus{"0", params.StatusStarted, ""},
 
1403
                addMachine{machineId: "1", job: state.JobHostUnits},
 
1404
                setAddresses{"1", []instance.Address{instance.NewAddress("dummyenv-1.dns")}},
 
1405
                startAliveMachine{"1"},
 
1406
                setMachineStatus{"1", params.StatusStarted, ""},
 
1407
                addCharm{"mysql"},
 
1408
                addService{"mysql", "mysql"},
 
1409
                setServiceExposed{"mysql", true},
 
1410
                addAliveUnit{"mysql", "1"},
 
1411
                setUnitCharmURL{"mysql/0", "cs:quantal/mysql-1"},
 
1412
                addCharmWithRevision{addCharm{"mysql"}, "cs", 2},
 
1413
                setServiceCharm{"mysql", "cs:quantal/mysql-2"},
 
1414
                addCharmPlaceholder{"mysql", 23},
 
1415
 
 
1416
                expect{
 
1417
                        "services and units with correct charm status",
 
1418
                        M{
 
1419
                                "environment": "dummyenv",
 
1420
                                "machines": M{
 
1421
                                        "0": machine0,
 
1422
                                        "1": machine1,
 
1423
                                },
 
1424
                                "services": M{
 
1425
                                        "mysql": M{
 
1426
                                                "charm":          "cs:quantal/mysql-2",
 
1427
                                                "can-upgrade-to": "cs:quantal/mysql-23",
 
1428
                                                "exposed":        true,
 
1429
                                                "units": M{
 
1430
                                                        "mysql/0": M{
 
1431
                                                                "machine":        "1",
 
1432
                                                                "agent-state":    "started",
 
1433
                                                                "upgrading-from": "cs:quantal/mysql-1",
 
1434
                                                                "public-address": "dummyenv-1.dns",
 
1435
                                                        },
 
1436
                                                },
 
1437
                                        },
 
1438
                                },
 
1439
                        },
 
1440
                },
 
1441
        ), test(
 
1442
                "service with local charm not shown as out of date",
 
1443
                addMachine{machineId: "0", job: state.JobManageState},
 
1444
                setAddresses{"0", []instance.Address{instance.NewAddress("dummyenv-0.dns")}},
 
1445
                startAliveMachine{"0"},
 
1446
                setMachineStatus{"0", params.StatusStarted, ""},
 
1447
                addMachine{machineId: "1", job: state.JobHostUnits},
 
1448
                setAddresses{"1", []instance.Address{instance.NewAddress("dummyenv-1.dns")}},
 
1449
                startAliveMachine{"1"},
 
1450
                setMachineStatus{"1", params.StatusStarted, ""},
 
1451
                addCharm{"mysql"},
 
1452
                addService{"mysql", "mysql"},
 
1453
                setServiceExposed{"mysql", true},
 
1454
                addAliveUnit{"mysql", "1"},
 
1455
                setUnitCharmURL{"mysql/0", "cs:quantal/mysql-1"},
 
1456
                addCharmWithRevision{addCharm{"mysql"}, "local", 1},
 
1457
                setServiceCharm{"mysql", "local:quantal/mysql-1"},
 
1458
                addCharmPlaceholder{"mysql", 23},
 
1459
 
 
1460
                expect{
 
1461
                        "services and units with correct charm status",
 
1462
                        M{
 
1463
                                "environment": "dummyenv",
 
1464
                                "machines": M{
 
1465
                                        "0": machine0,
 
1466
                                        "1": machine1,
 
1467
                                },
 
1468
                                "services": M{
 
1469
                                        "mysql": M{
 
1470
                                                "charm":   "local:quantal/mysql-1",
 
1471
                                                "exposed": true,
 
1472
                                                "units": M{
 
1473
                                                        "mysql/0": M{
 
1474
                                                                "machine":        "1",
 
1475
                                                                "agent-state":    "started",
 
1476
                                                                "upgrading-from": "cs:quantal/mysql-1",
 
1477
                                                                "public-address": "dummyenv-1.dns",
1233
1478
                                                        },
1234
1479
                                                },
1235
1480
                                        },
1317
1562
        ctx.pingers[m.Id()] = pinger
1318
1563
}
1319
1564
 
 
1565
type setAddresses struct {
 
1566
        machineId string
 
1567
        addresses []instance.Address
 
1568
}
 
1569
 
 
1570
func (sa setAddresses) step(c *gc.C, ctx *context) {
 
1571
        m, err := ctx.st.Machine(sa.machineId)
 
1572
        c.Assert(err, gc.IsNil)
 
1573
        err = m.SetAddresses(sa.addresses)
 
1574
        c.Assert(err, gc.IsNil)
 
1575
}
 
1576
 
1320
1577
type setTools struct {
1321
1578
        machineId string
1322
1579
        version   version.Binary
1333
1590
        name string
1334
1591
}
1335
1592
 
1336
 
func (ac addCharm) step(c *gc.C, ctx *context) {
 
1593
func (ac addCharm) addCharmStep(c *gc.C, ctx *context, scheme string, rev int) {
1337
1594
        ch := coretesting.Charms.Dir(ac.name)
1338
 
        name, rev := ch.Meta().Name, ch.Revision()
1339
 
        curl := charm.MustParseURL(fmt.Sprintf("local:quantal/%s-%d", name, rev))
 
1595
        name := ch.Meta().Name
 
1596
        curl := charm.MustParseURL(fmt.Sprintf("%s:quantal/%s-%d", scheme, name, rev))
1340
1597
        bundleURL, err := url.Parse(fmt.Sprintf("http://bundles.testing.invalid/%s-%d", name, rev))
1341
1598
        c.Assert(err, gc.IsNil)
1342
1599
        dummy, err := ctx.st.AddCharm(ch, curl, bundleURL, fmt.Sprintf("%s-%d-sha256", name, rev))
1344
1601
        ctx.charms[ac.name] = dummy
1345
1602
}
1346
1603
 
 
1604
func (ac addCharm) step(c *gc.C, ctx *context) {
 
1605
        ch := coretesting.Charms.Dir(ac.name)
 
1606
        ac.addCharmStep(c, ctx, "cs", ch.Revision())
 
1607
}
 
1608
 
 
1609
type addCharmWithRevision struct {
 
1610
        addCharm
 
1611
        scheme string
 
1612
        rev    int
 
1613
}
 
1614
 
 
1615
func (ac addCharmWithRevision) step(c *gc.C, ctx *context) {
 
1616
        ac.addCharmStep(c, ctx, ac.scheme, ac.rev)
 
1617
}
 
1618
 
1347
1619
type addService struct {
1348
1620
        name  string
1349
1621
        charm string
1370
1642
        }
1371
1643
}
1372
1644
 
 
1645
type setServiceCharm struct {
 
1646
        name  string
 
1647
        charm string
 
1648
}
 
1649
 
 
1650
func (ssc setServiceCharm) step(c *gc.C, ctx *context) {
 
1651
        ch, err := ctx.st.Charm(charm.MustParseURL(ssc.charm))
 
1652
        c.Assert(err, gc.IsNil)
 
1653
        s, err := ctx.st.Service(ssc.name)
 
1654
        c.Assert(err, gc.IsNil)
 
1655
        err = s.SetCharm(ch, false)
 
1656
        c.Assert(err, gc.IsNil)
 
1657
}
 
1658
 
 
1659
type addCharmPlaceholder struct {
 
1660
        name string
 
1661
        rev  int
 
1662
}
 
1663
 
 
1664
func (ac addCharmPlaceholder) step(c *gc.C, ctx *context) {
 
1665
        ch := coretesting.Charms.Dir(ac.name)
 
1666
        name := ch.Meta().Name
 
1667
        curl := charm.MustParseURL(fmt.Sprintf("cs:quantal/%s-%d", name, ac.rev))
 
1668
        err := ctx.st.AddStoreCharmPlaceholder(curl)
 
1669
        c.Assert(err, gc.IsNil)
 
1670
}
 
1671
 
1373
1672
type addUnit struct {
1374
1673
        serviceName string
1375
1674
        machineId   string
1431
1730
        c.Assert(err, gc.IsNil)
1432
1731
}
1433
1732
 
 
1733
type setUnitCharmURL struct {
 
1734
        unitName string
 
1735
        charm    string
 
1736
}
 
1737
 
 
1738
func (uc setUnitCharmURL) step(c *gc.C, ctx *context) {
 
1739
        u, err := ctx.st.Unit(uc.unitName)
 
1740
        c.Assert(err, gc.IsNil)
 
1741
        curl := charm.MustParseURL(uc.charm)
 
1742
        err = u.SetCharmURL(curl)
 
1743
        c.Assert(err, gc.IsNil)
 
1744
        err = u.SetStatus(params.StatusStarted, "", nil)
 
1745
        c.Assert(err, gc.IsNil)
 
1746
}
 
1747
 
1434
1748
type openUnitPort struct {
1435
1749
        unitName string
1436
1750
        protocol string
1545
1859
                args := append([]string{"--format", format.name}, e.scope...)
1546
1860
                code, stdout, stderr := runStatus(c, args...)
1547
1861
                c.Assert(code, gc.Equals, 0)
1548
 
                c.Assert(stderr, gc.HasLen, 0)
 
1862
                if !c.Check(stderr, gc.HasLen, 0) {
 
1863
                        c.Fatalf("status failed: %s", string(stderr))
 
1864
                }
1549
1865
 
1550
1866
                // Prepare the output in the same format.
1551
1867
                buf, err := format.marshal(e.output)