コード例 #1
0
ファイル: test_booth.py プロジェクト: cwjenkins/pcs
 def test_with_authfile(self, mock_pull):
     mock_pull.return_value = {
         "config": {
             "name": "name.conf",
             "data": "config"
         },
         "authfile": {
             "name": "name.key",
             "data": base64.b64encode("key".encode("utf-8")).decode("utf-8")
         }
     }
     commands.pull_config(self.mock_env, "node", "name")
     mock_pull.assert_called_once_with(self.mock_com, NodeAddresses("node"),
                                       "name")
     self.mock_env.booth.create_config.called_once_with("config", True)
     self.mock_env.booth.set_key_path.called_once_with(
         os.path.join(settings.booth_config_dir, "name.key"))
     self.mock_env.booth.create_key.called_once_with(
         "key".encode("utf-8"), True)
     assert_report_item_list_equal(
         self.mock_rep.report_item_list,
         [(Severities.INFO, report_codes.BOOTH_FETCHING_CONFIG_FROM_NODE, {
             "node": "node",
             "config": "name"
         }),
          (Severities.INFO, report_codes.BOOTH_CONFIG_ACCEPTED_BY_NODE, {
              "node": None,
              "name_list": ["name"]
          })])
コード例 #2
0
ファイル: test_booth.py プロジェクト: tomjelinek/pcs
    def test_success(self, pwd_mock, grp_mock):
        self._set_pwd_mock(pwd_mock)
        self._set_grp_mock(grp_mock)

        commands.pull_config(self.env_assist.get_env(), self.node_name)

        self.env_assist.assert_reports(self.report_list)
コード例 #3
0
ファイル: test_booth.py プロジェクト: gmelikov/pcs
    def test_success(self, pwd_mock, grp_mock):
        self._set_pwd_mock(pwd_mock)
        self._set_grp_mock(grp_mock)

        commands.pull_config(self.env_assist.get_env(), self.node_name)

        self.env_assist.assert_reports(self.report_list)
コード例 #4
0
ファイル: test_booth.py プロジェクト: wuyeliang/pcs
    def test_success_config_and_authfile_exists(self, pwd_mock, grp_mock):
        self._set_pwd_mock(pwd_mock)
        self._set_grp_mock(grp_mock)

        (self.config
            .fs.exists(self.config_path, True, instead="fs.exists")
            .fs.exists(
                self.authfile_path, True,
                name="fs.exists.authfile",
                instead="fs.exists.authfile",
            )
        )

        commands.pull_config(self.env_assist.get_env(), self.node_name)

        self.env_assist.assert_reports(
            self.report_list
            +
            [
                fixture.warn(
                    report_codes.FILE_ALREADY_EXISTS,
                    node=None, file_role=role, file_path=path,
                ) for role, path in [
                    (file_roles.BOOTH_CONFIG, self.config_path),
                    (file_roles.BOOTH_KEY, self.authfile_path)
                ]
            ]
        )
コード例 #5
0
ファイル: test_booth.py プロジェクト: cwjenkins/pcs
 def test_without_authfile(self, mock_pull):
     mock_pull.return_value = {
         "config": {
             "name": "name.conf",
             "data": "config"
         },
         "authfile": {
             "name": None,
             "data": None
         }
     }
     commands.pull_config(self.mock_env, "node", "name")
     mock_pull.assert_called_once_with(self.mock_com, NodeAddresses("node"),
                                       "name")
     self.mock_env.booth.create_config.called_once_with("config", True)
     self.assertEqual(0, self.mock_env.booth.set_key_path.call_count)
     self.assertEqual(0, self.mock_env.booth.create_key.call_count)
     assert_report_item_list_equal(
         self.mock_rep.report_item_list,
         [(Severities.INFO, report_codes.BOOTH_FETCHING_CONFIG_FROM_NODE, {
             "node": "node",
             "config": "name"
         }),
          (Severities.INFO, report_codes.BOOTH_CONFIG_ACCEPTED_BY_NODE, {
              "node": None,
              "name_list": ["name"]
          })])
コード例 #6
0
ファイル: test_booth.py プロジェクト: gmelikov/pcs
    def test_success_config_exists(self):
        self.config.fs.exists(self.config_path, True, instead="fs.exists")

        commands.pull_config(self.env_assist.get_env(), self.node_name)

        self.env_assist.assert_reports(self.report_list + [
            fixture.warn(
                report_codes.FILE_ALREADY_EXISTS,
                node=None,
                file_role=file_roles.BOOTH_CONFIG,
                file_path=self.config_path,
            ),
        ])
コード例 #7
0
ファイル: test_booth.py プロジェクト: tomjelinek/pcs
    def test_network_request_failure(self):
        self.config.http.booth.get_config(
            self.name,
            communication_list=[dict(
                label=self.node_name,
                response_code=400,
                output=self.reason,
            )]
        )

        self.env_assist.assert_raise_library_error(
            lambda: commands.pull_config(
                self.env_assist.get_env(), self.node_name
            ),
            [],
        )
        self.env_assist.assert_reports([
            self.report_list[0],
            fixture.error(
                report_codes.NODE_COMMUNICATION_COMMAND_UNSUCCESSFUL,
                force_code=None,
                node=self.node_name,
                command="remote/booth_get_config",
                reason=self.reason,
            ),
        ])
コード例 #8
0
ファイル: test_booth.py プロジェクト: tomjelinek/pcs
    def test_network_failure(self):
        self.config.http.booth.get_config(
            self.name,
            communication_list=[dict(
                label=self.node_name,
                was_connected=False,
                errno=1,
                error_msg=self.reason,
            )]
        )

        self.env_assist.assert_raise_library_error(
            lambda: commands.pull_config(
                self.env_assist.get_env(), self.node_name
            ),
            [],
        )
        self.env_assist.assert_reports([
            self.report_list[0],
            fixture.error(
                report_codes.NODE_COMMUNICATION_ERROR_UNABLE_TO_CONNECT,
                force_code=None,
                node=self.node_name,
                command="remote/booth_get_config",
                reason=self.reason,
            ),
        ])
コード例 #9
0
ファイル: test_booth.py プロジェクト: tomjelinek/pcs
    def test_write_failure(self):
        (self.config
            .http.booth.get_config(
                self.name, self.config_data, node_labels=[self.node_name]
            )
            .fs.exists(self.config_path, False)
            .fs.open(
                self.config_path,
                mode="w",
                side_effect=EnvironmentError(0, self.reason, self.config_path),
            )
        )

        self.env_assist.assert_raise_library_error(
            lambda: commands.pull_config(
                self.env_assist.get_env(), self.node_name
            ),
            [
                fixture.error(
                    report_codes.FILE_IO_ERROR,
                    reason="{}: '{}'".format(self.reason, self.config_path),
                    file_role=file_roles.BOOTH_CONFIG,
                    file_path=self.config_path,
                    operation="write",
                )
            ],
            expected_in_processor=False,
        )
        self.env_assist.assert_reports(self.report_list[:1])
コード例 #10
0
ファイル: test_booth.py プロジェクト: tomjelinek/pcs
    def test_unable_to_set_authfile_uid_gid(self, pwd_mock, grp_mock):
        self._set_pwd_mock(pwd_mock)
        self._set_grp_mock(grp_mock)
        (self.config
            .fs.open(
                self.authfile_path,
                self.booth_authfile_open_mock,
                mode="wb",
                name="fs.open.authfile.write"
            )
            .fs.chown(
                self.authfile_path, self.pcmk_uid, self.pcmk_gid,
                side_effect=EnvironmentError(1, self.reason, self.authfile_path)
            )
        )

        self.env_assist.assert_raise_library_error(
            lambda: commands.pull_config(
                self.env_assist.get_env(), self.node_name
            ),
            [
                fixture.error(
                    report_codes.FILE_IO_ERROR,
                    reason="{}: '{}'".format(self.reason, self.authfile_path),
                    file_role=file_roles.BOOTH_KEY,
                    file_path=self.authfile_path,
                    operation="chown",
                )
            ],
            expected_in_processor=False,
        )
        self.assert_authfile_written()
        self.env_assist.assert_reports(self.report_list[:1])
コード例 #11
0
ファイル: test_booth.py プロジェクト: HideoYamauchi/pcs
 def test_invalid_input(self, mock_pull):
     mock_pull.return_value = {}
     assert_raise_library_error(
         lambda: commands.pull_config(self.mock_env, "node", "name"),
         (
             Severities.ERROR,
             report_codes.INVALID_RESPONSE_FORMAT,
             {"node": "node"}
         )
     )
     mock_pull.assert_called_once_with(
         self.mock_com, NodeAddresses("node"), "name"
     )
     self.assertEqual(0, self.mock_env.booth.create_config.call_count)
     self.assertEqual(0, self.mock_env.booth.set_key_path.call_count)
     self.assertEqual(0, self.mock_env.booth.create_key.call_count)
     assert_report_item_list_equal(
         self.mock_rep.report_item_list,
         [(
             Severities.INFO,
             report_codes.BOOTH_FETCHING_CONFIG_FROM_NODE,
             {
                 "node": "node",
                 "config": "name"
             }
         )]
     )
コード例 #12
0
ファイル: test_booth.py プロジェクト: gmelikov/pcs
    def test_unable_to_set_authfile_mode(self, pwd_mock, grp_mock):
        self._set_pwd_mock(pwd_mock)
        self._set_grp_mock(grp_mock)
        (self.config.fs.open(self.authfile_path,
                             self.booth_authfile_open_mock,
                             mode="wb",
                             name="fs.open.authfile.write").fs.chown(
                                 self.authfile_path,
                                 self.pcmk_uid,
                                 self.pcmk_gid,
                             ).fs.chmod(self.authfile_path,
                                        settings.booth_authkey_file_mode,
                                        side_effect=EnvironmentError(
                                            1, self.reason,
                                            self.authfile_path)))

        self.env_assist.assert_raise_library_error(
            lambda: commands.pull_config(self.env_assist.get_env(), self.
                                         node_name),
            [
                fixture.error(
                    report_codes.FILE_IO_ERROR,
                    reason="{}: '{}'".format(self.reason, self.authfile_path),
                    file_role=file_roles.BOOTH_KEY,
                    file_path=self.authfile_path,
                    operation="chmod",
                )
            ],
            expected_in_processor=False,
        )
        self.assert_authfile_written()
        self.env_assist.assert_reports(self.report_list[:1])
コード例 #13
0
ファイル: test_booth.py プロジェクト: gmelikov/pcs
    def test_network_request_failure(self):
        self.config.http.booth.get_config(self.name,
                                          communication_list=[
                                              dict(
                                                  label=self.node_name,
                                                  response_code=400,
                                                  output=self.reason,
                                              )
                                          ])

        self.env_assist.assert_raise_library_error(
            lambda: commands.pull_config(self.env_assist.get_env(), self.
                                         node_name),
            [],
        )
        self.env_assist.assert_reports([
            self.report_list[0],
            fixture.error(
                report_codes.NODE_COMMUNICATION_COMMAND_UNSUCCESSFUL,
                force_code=None,
                node=self.node_name,
                command="remote/booth_get_config",
                reason=self.reason,
            ),
        ])
コード例 #14
0
ファイル: test_booth.py プロジェクト: gmelikov/pcs
    def test_write_failure(self):
        (self.config.http.booth.get_config(
            self.name,
            self.config_data, node_labels=[self.node_name]).fs.exists(
                self.config_path, False).fs.open(
                    self.config_path,
                    mode="w",
                    side_effect=EnvironmentError(0, self.reason,
                                                 self.config_path),
                ))

        self.env_assist.assert_raise_library_error(
            lambda: commands.pull_config(self.env_assist.get_env(), self.
                                         node_name),
            [
                fixture.error(
                    report_codes.FILE_IO_ERROR,
                    reason="{}: '{}'".format(self.reason, self.config_path),
                    file_role=file_roles.BOOTH_CONFIG,
                    file_path=self.config_path,
                    operation="write",
                )
            ],
            expected_in_processor=False,
        )
        self.env_assist.assert_reports(self.report_list[:1])
コード例 #15
0
ファイル: test_booth.py プロジェクト: gmelikov/pcs
    def test_network_failure(self):
        self.config.http.booth.get_config(self.name,
                                          communication_list=[
                                              dict(
                                                  label=self.node_name,
                                                  was_connected=False,
                                                  errno=1,
                                                  error_msg=self.reason,
                                              )
                                          ])

        self.env_assist.assert_raise_library_error(
            lambda: commands.pull_config(self.env_assist.get_env(), self.
                                         node_name),
            [],
        )
        self.env_assist.assert_reports([
            self.report_list[0],
            fixture.error(
                report_codes.NODE_COMMUNICATION_ERROR_UNABLE_TO_CONNECT,
                force_code=None,
                node=self.node_name,
                command="remote/booth_get_config",
                reason=self.reason,
            ),
        ])
コード例 #16
0
ファイル: test_booth.py プロジェクト: wuyeliang/pcs
    def test_unable_to_get_gid(self, pwd_mock, grp_mock):
        self._set_pwd_mock(pwd_mock)
        grp_mock.side_effect = KeyError()
        self.config.fs.open(
            self.authfile_path,
            self.booth_authfile_open_mock,
            mode="wb",
            name="fs.open.authfile.write"
        )

        self.env_assist.assert_raise_library_error(
            lambda: commands.pull_config(
                self.env_assist.get_env(), self.node_name
            ),
            [
                fixture.error(
                    report_codes.UNABLE_TO_DETERMINE_GROUP_GID,
                    group=settings.pacemaker_gname,
                )
            ],
            expected_in_processor=False,
        )
        self.assert_authfile_written()
        grp_mock.assert_called_once_with(settings.pacemaker_gname)
        self.env_assist.assert_reports(self.report_list[:1])
コード例 #17
0
ファイル: test_booth.py プロジェクト: tomjelinek/pcs
    def test_success_config_exists(self):
        self.config.fs.exists(self.config_path, True, instead="fs.exists")

        commands.pull_config(self.env_assist.get_env(), self.node_name)

        self.env_assist.assert_reports(
            self.report_list
            +
            [
                fixture.warn(
                    report_codes.FILE_ALREADY_EXISTS,
                    node=None,
                    file_role=file_roles.BOOTH_CONFIG,
                    file_path=self.config_path,
                ),
            ]
        )
コード例 #18
0
ファイル: test_booth.py プロジェクト: idevat/pcs
 def test_with_authfile(self, mock_pull):
     mock_pull.return_value = {
         "config": {
             "name": "name.conf",
             "data": "config"
         },
         "authfile": {
             "name": "name.key",
             "data": base64.b64encode("key".encode("utf-8")).decode("utf-8")
         }
     }
     commands.pull_config(self.mock_env, "node", "name")
     mock_pull.assert_called_once_with(
         self.mock_com, NodeAddresses("node"), "name"
     )
     self.mock_env.booth.create_config.called_once_with("config", True)
     self.mock_env.booth.set_key_path.called_once_with(os.path.join(
         settings.booth_config_dir, "name.key"
     ))
     self.mock_env.booth.create_key.called_once_with(
         "key".encode("utf-8"), True
     )
     assert_report_item_list_equal(
         self.mock_rep.report_item_list,
         [
             (
                 Severities.INFO,
                 report_codes.BOOTH_FETCHING_CONFIG_FROM_NODE,
                 {
                     "node": "node",
                     "config": "name"
                 }
             ),
             (
                 Severities.INFO,
                 report_codes.BOOTH_CONFIG_ACCEPTED_BY_NODE,
                 {
                     "node": None,
                     "name": "name",
                     "name_list": ["name"]
                 }
             )
         ]
     )
コード例 #19
0
ファイル: test_booth.py プロジェクト: idevat/pcs
 def test_without_authfile(self, mock_pull):
     mock_pull.return_value = {
         "config": {
             "name": "name.conf",
             "data": "config"
         },
         "authfile": {
             "name": None,
             "data": None
         }
     }
     commands.pull_config(self.mock_env, "node", "name")
     mock_pull.assert_called_once_with(
         self.mock_com, NodeAddresses("node"), "name"
     )
     self.mock_env.booth.create_config.called_once_with("config", True)
     self.assertEqual(0, self.mock_env.booth.set_key_path.call_count)
     self.assertEqual(0, self.mock_env.booth.create_key.call_count)
     assert_report_item_list_equal(
         self.mock_rep.report_item_list,
         [
             (
                 Severities.INFO,
                 report_codes.BOOTH_FETCHING_CONFIG_FROM_NODE,
                 {
                     "node": "node",
                     "config": "name"
                 }
             ),
             (
                 Severities.INFO,
                 report_codes.BOOTH_CONFIG_ACCEPTED_BY_NODE,
                 {
                     "node": None,
                     "name": "name",
                     "name_list": ["name"]
                 }
             )
         ]
     )
コード例 #20
0
ファイル: test_booth.py プロジェクト: cwjenkins/pcs
 def test_invalid_input(self, mock_pull):
     mock_pull.return_value = {}
     assert_raise_library_error(
         lambda: commands.pull_config(self.mock_env, "node", "name"),
         (Severities.ERROR, report_codes.INVALID_RESPONSE_FORMAT, {
             "node": "node"
         }))
     mock_pull.assert_called_once_with(self.mock_com, NodeAddresses("node"),
                                       "name")
     self.assertEqual(0, self.mock_env.booth.create_config.call_count)
     self.assertEqual(0, self.mock_env.booth.set_key_path.call_count)
     self.assertEqual(0, self.mock_env.booth.create_key.call_count)
     assert_report_item_list_equal(
         self.mock_rep.report_item_list,
         [(Severities.INFO, report_codes.BOOTH_FETCHING_CONFIG_FROM_NODE, {
             "node": "node",
             "config": "name"
         })])
コード例 #21
0
ファイル: test_booth.py プロジェクト: gmelikov/pcs
 def test_authfile_write_failure(self, pwd_mock, grp_mock):
     self.config.fs.open(self.authfile_path,
                         mode="wb",
                         name="fs.open.authfile.write",
                         side_effect=EnvironmentError(
                             1, self.reason, self.authfile_path))
     self.env_assist.assert_raise_library_error(
         lambda: commands.pull_config(self.env_assist.get_env(), self.
                                      node_name),
         [
             fixture.error(
                 report_codes.FILE_IO_ERROR,
                 reason="{}: '{}'".format(self.reason, self.authfile_path),
                 file_role=file_roles.BOOTH_KEY,
                 file_path=self.authfile_path,
                 operation="write",
             )
         ],
         expected_in_processor=False,
     )
     self.env_assist.assert_reports(self.report_list[:1])
コード例 #22
0
ファイル: test_booth.py プロジェクト: gmelikov/pcs
    def test_request_response_missing_keys(self):
        self.config.http.booth.get_config(self.name,
                                          communication_list=[
                                              dict(
                                                  label=self.node_name,
                                                  output="{'config':{}}",
                                              )
                                          ])

        self.env_assist.assert_raise_library_error(
            lambda: commands.pull_config(self.env_assist.get_env(), self.
                                         node_name),
            [],
        )
        self.env_assist.assert_reports([
            self.report_list[0],
            fixture.error(
                report_codes.INVALID_RESPONSE_FORMAT,
                node=self.node_name,
            ),
        ])
コード例 #23
0
ファイル: test_booth.py プロジェクト: tomjelinek/pcs
    def test_request_response_missing_keys(self):
        self.config.http.booth.get_config(
            self.name,
            communication_list=[dict(
                label=self.node_name,
                output="{'config':{}}",
            )]
        )

        self.env_assist.assert_raise_library_error(
            lambda: commands.pull_config(
                self.env_assist.get_env(), self.node_name
            ),
            [],
        )
        self.env_assist.assert_reports([
            self.report_list[0],
            fixture.error(
                report_codes.INVALID_RESPONSE_FORMAT,
                node=self.node_name,
            ),
        ])
コード例 #24
0
ファイル: test_booth.py プロジェクト: tomjelinek/pcs
 def test_authfile_write_failure(self, pwd_mock, grp_mock):
     self.config.fs.open(
         self.authfile_path,
         mode="wb",
         name="fs.open.authfile.write",
         side_effect=EnvironmentError(1, self.reason, self.authfile_path)
     )
     self.env_assist.assert_raise_library_error(
         lambda: commands.pull_config(
             self.env_assist.get_env(), self.node_name
         ),
         [
             fixture.error(
                 report_codes.FILE_IO_ERROR,
                 reason="{}: '{}'".format(self.reason, self.authfile_path),
                 file_role=file_roles.BOOTH_KEY,
                 file_path=self.authfile_path,
                 operation="write",
             )
         ],
         expected_in_processor=False,
     )
     self.env_assist.assert_reports(self.report_list[:1])
コード例 #25
0
ファイル: test_booth.py プロジェクト: tomjelinek/pcs
    def test_success(self):
        commands.pull_config(self.env_assist.get_env(), self.node_name)

        self.env_assist.assert_reports(self.report_list)
コード例 #26
0
ファイル: test_booth.py プロジェクト: gmelikov/pcs
    def test_success(self):
        commands.pull_config(self.env_assist.get_env(), self.node_name)

        self.env_assist.assert_reports(self.report_list)