~landscape/landscape-client/trunk

« back to all changes in this revision

Viewing changes to landscape/monitor/tests/test_jujuinfo.py

Merge multiple-juju-unit-files [f=1325599] [r=ack,free.ekanayaka] [a=Chris Glass]
This branch creates a juju-info.d/ directory in the landscape-client data path, and reads all files matching *.json in this directory as a separate juju-info file.

It then reports juju-info lists to the server, either in the registration message or using a new message (to send a list of "juju info" instead of just one).

Show diffs side-by-side

added added

removed removed

Lines of Context:
10
10
                               "api-addresses": "10.0.3.1:17070",
11
11
                               "private-address": "127.0.0.1"})
12
12
 
 
13
SAMPLE_JUJU_FILE = "juju-unit-name.json"
 
14
 
13
15
 
14
16
class JujuInfoTest(LandscapeTest):
15
17
 
17
19
 
18
20
    def setUp(self):
19
21
        super(JujuInfoTest, self).setUp()
20
 
        self.mstore.set_accepted_types(["juju-info"])
 
22
        self.mstore.set_accepted_types(["juju-units-info"])
21
23
        self.plugin = JujuInfo()
22
24
        self.monitor.add(self.plugin)
23
 
        self.makeFile(SAMPLE_JUJU_INFO, path=self.config.juju_filename)
 
25
 
 
26
        if not os.path.exists(self.config.juju_directory):
 
27
            os.mkdir(self.config.juju_directory)
 
28
 
 
29
        self.filepath = os.path.join(self.config.juju_directory,
 
30
                                     SAMPLE_JUJU_FILE)
 
31
        self.makeFile(SAMPLE_JUJU_INFO, path=self.filepath)
24
32
 
25
33
    def test_get_sample_juju_info(self):
26
34
        """
29
37
        """
30
38
        self.plugin.exchange()
31
39
        message = self.mstore.get_pending_messages()[0]
32
 
        self.assertEqual(message["type"], "juju-info")
33
 
        self.assertEqual(message["environment-uuid"], "DEAD-BEEF")
34
 
        self.assertEqual(message["unit-name"], "juju-unit-name")
35
 
        self.assertEqual(message["api-addresses"], ["10.0.3.1:17070"])
 
40
        self.assertEqual(message["type"], "juju-units-info")
 
41
        juju_info = message["juju-info-list"][0]
 
42
        self.assertEqual(juju_info["environment-uuid"], "DEAD-BEEF")
 
43
        self.assertEqual(juju_info["unit-name"], "juju-unit-name")
 
44
        self.assertEqual(juju_info["api-addresses"], ["10.0.3.1:17070"])
36
45
 
37
46
    def test_juju_info_reported_only_once(self):
38
47
        """
42
51
        self.plugin.exchange()
43
52
        messages = self.mstore.get_pending_messages()
44
53
        self.assertEqual(len(messages), 1)
45
 
        self.assertEqual(messages[0]["type"], "juju-info")
 
54
        self.assertEqual(messages[0]["type"], "juju-units-info")
46
55
 
47
56
        self.plugin.exchange()
48
57
        messages = self.mstore.get_pending_messages()
55
64
        """
56
65
        self.plugin.exchange()
57
66
        message = self.mstore.get_pending_messages()[0]
58
 
        self.assertEqual(message["type"], "juju-info")
59
 
        self.assertEqual(message["environment-uuid"], "DEAD-BEEF")
60
 
        self.assertEqual(message["unit-name"], "juju-unit-name")
61
 
        self.assertEqual(message["api-addresses"], ["10.0.3.1:17070"])
 
67
        self.assertEqual(message["type"], "juju-units-info")
 
68
        juju_info = message["juju-info-list"][0]
 
69
        self.assertEqual(juju_info["environment-uuid"], "DEAD-BEEF")
 
70
        self.assertEqual(juju_info["unit-name"], "juju-unit-name")
 
71
        self.assertEqual(juju_info["api-addresses"], ["10.0.3.1:17070"])
62
72
 
63
73
        self.makeFile(
64
74
            json.dumps({"environment-uuid": "FEED-BEEF",
65
75
                        "unit-name": "changed-unit-name",
66
76
                        "api-addresses": "10.0.3.2:17070",
67
77
                        "private-address": "127.0.1.1"}),
68
 
            path=self.config.juju_filename)
 
78
            dirname=self.config.juju_directory, suffix=".json")
69
79
        self.plugin.exchange()
70
80
        message = self.mstore.get_pending_messages()[1]
71
 
        self.assertEqual(message["type"], "juju-info")
72
 
        self.assertEqual(message["environment-uuid"], "FEED-BEEF")
73
 
        self.assertEqual(message["unit-name"], "changed-unit-name")
74
 
        self.assertEqual(message["api-addresses"], ["10.0.3.2:17070"])
 
81
        self.assertEqual(message["type"], "juju-units-info")
 
82
        juju_info = message["juju-info-list"][0]
 
83
        self.assertEqual(juju_info["environment-uuid"], "FEED-BEEF")
 
84
        self.assertEqual(juju_info["unit-name"], "changed-unit-name")
 
85
        self.assertEqual(juju_info["api-addresses"], ["10.0.3.2:17070"])
75
86
 
76
87
    def test_no_message_with_invalid_json(self):
77
88
        """No Juju message is sent if the JSON file is invalid."""
78
 
        self.makeFile("barf", path=self.config.juju_filename)
 
89
        self.makeFile("barf", path=self.filepath)
79
90
 
80
91
        self.plugin.exchange()
81
92
        messages = self.mstore.get_pending_messages()
86
97
 
87
98
    def test_no_message_with_missing_file(self):
88
99
        """No Juju message is sent if the JSON file is missing."""
89
 
        os.remove(self.config.juju_filename)
 
100
        os.remove(self.filepath)
90
101
 
91
102
        self.plugin.exchange()
92
103
        messages = self.mstore.get_pending_messages()