Example #1
0
    def test_call_success(self):
        '''
        test module calling inside containers
        '''
        ret = None
        docker_run_all_mock = MagicMock(
            return_value={
                'retcode': 0,
                'stdout': '{"retcode": 0, "comment": "container cmd"}',
                'stderr': 'err',
            })
        docker_copy_to_mock = MagicMock(return_value={'retcode': 0})
        docker_config_mock = MagicMock(return_value='')
        client = Mock()
        client.put_archive = Mock()
        get_client_mock = MagicMock(return_value=client)

        context = {'docker.exec_driver': 'docker-exec'}
        salt_dunder = {'config.option': docker_config_mock}

        with patch.object(docker_mod, 'run_all', docker_run_all_mock):
            with patch.object(docker_mod, 'copy_to', docker_copy_to_mock):
                with patch.object(docker_mod, '_get_client', get_client_mock):
                    with patch.dict(docker_mod.__opts__, {'cachedir': '/tmp'}):
                        with patch.dict(docker_mod.__salt__, salt_dunder):
                            with patch.dict(docker_mod.__context__, context):
                                # call twice to verify tmp path later
                                for i in range(2):
                                    ret = docker_mod.call('ID',
                                                          'test.arg',
                                                          1,
                                                          2,
                                                          arg1='val1')

        # Check that the directory is different each time
        # [ call(name, [args]), ...
        self.maxDiff = None
        self.assertIn('mkdir', docker_run_all_mock.mock_calls[0][1][1])
        self.assertIn('mkdir', docker_run_all_mock.mock_calls[4][1][1])
        self.assertNotEqual(docker_run_all_mock.mock_calls[0][1][1],
                            docker_run_all_mock.mock_calls[4][1][1])

        self.assertIn('salt-call', docker_run_all_mock.mock_calls[2][1][1])
        self.assertIn('salt-call', docker_run_all_mock.mock_calls[6][1][1])
        self.assertNotEqual(docker_run_all_mock.mock_calls[2][1][1],
                            docker_run_all_mock.mock_calls[6][1][1])

        # check thin untar
        self.assertIn('tarfile', docker_run_all_mock.mock_calls[1][1][1])
        self.assertIn('tarfile', docker_run_all_mock.mock_calls[5][1][1])
        self.assertNotEqual(docker_run_all_mock.mock_calls[1][1][1],
                            docker_run_all_mock.mock_calls[5][1][1])

        # check directory cleanup
        self.assertIn('rm -rf', docker_run_all_mock.mock_calls[3][1][1])
        self.assertIn('rm -rf', docker_run_all_mock.mock_calls[7][1][1])
        self.assertNotEqual(docker_run_all_mock.mock_calls[3][1][1],
                            docker_run_all_mock.mock_calls[7][1][1])

        self.assertEqual({"retcode": 0, "comment": "container cmd"}, ret)
Example #2
0
def test_call_success():
    """
    test module calling inside containers
    """
    ret = None
    docker_run_all_mock = MagicMock(
        return_value={
            "retcode": 0,
            "stdout": '{"retcode": 0, "comment": "container cmd"}',
            "stderr": "err",
        })
    docker_copy_to_mock = MagicMock(return_value={"retcode": 0})
    docker_config_mock = MagicMock(return_value="")
    client = Mock()
    client.put_archive = Mock()
    get_client_mock = MagicMock(return_value=client)

    context = {"docker.exec_driver": "docker-exec"}
    salt_dunder = {"config.option": docker_config_mock}

    with patch.object(
            docker_mod, "run_all", docker_run_all_mock), patch.object(
                docker_mod, "copy_to", docker_copy_to_mock), patch.object(
                    docker_mod, "_get_client", get_client_mock), patch.dict(
                        docker_mod.__opts__, {"cachedir": "/tmp"}), patch.dict(
                            docker_mod.__salt__,
                            salt_dunder), patch.dict(docker_mod.__context__,
                                                     context):
        # call twice to verify tmp path later
        for i in range(2):
            ret = docker_mod.call("ID", "test.arg", 1, 2, arg1="val1")

    # Check that the directory is different each time
    # [ call(name, [args]), ...
    assert "mkdir" in docker_run_all_mock.mock_calls[0][1][1]
    assert "mkdir" in docker_run_all_mock.mock_calls[5][1][1]
    assert (docker_run_all_mock.mock_calls[0][1][1] !=
            docker_run_all_mock.mock_calls[5][1][1])

    assert "python3 --version" == docker_run_all_mock.mock_calls[1][1][1]

    assert "salt-call" in docker_run_all_mock.mock_calls[3][1][1]
    assert "salt-call" in docker_run_all_mock.mock_calls[8][1][1]
    assert (docker_run_all_mock.mock_calls[3][1][1] !=
            docker_run_all_mock.mock_calls[8][1][1])

    # check thin untar
    assert "tarfile" in docker_run_all_mock.mock_calls[2][1][1]
    assert "tarfile" in docker_run_all_mock.mock_calls[7][1][1]
    assert (docker_run_all_mock.mock_calls[2][1][1] !=
            docker_run_all_mock.mock_calls[7][1][1])

    # check directory cleanup
    assert "rm -rf" in docker_run_all_mock.mock_calls[4][1][1]
    assert "rm -rf" in docker_run_all_mock.mock_calls[9][1][1]
    assert (docker_run_all_mock.mock_calls[4][1][1] !=
            docker_run_all_mock.mock_calls[9][1][1])

    assert {"retcode": 0, "comment": "container cmd"} == ret