def test_execute_does_not_swallow_tracebacks(self):
        with patch.dict(Commands.methods, clear=True):
            @CommandLineParser.command.im_func()
            def boom(*args, **kwargs):
                def subboom():
                    raise IndexError("Boom!")
                subboom()

            parser = CommandLineParser()
            parser.parse(["boom"])

            try:
                parser.execute()
            except IndexError:
                _, _, exc_traceback = sys.exc_info()
                self.assertIn(
                    "subboom()\n",
                    traceback.format_exc(),
                    msg="Lost some stack frames when re-raising!",
                )
            else:
                self.fail("execute() should have raised an IndexError!")
    def test_execute_does_not_swallow_tracebacks(self):
        with patch.dict(Commands.methods, clear=True):
            @CommandLineParser.command.im_func()
            def boom(*args, **kwargs):
                def subboom():
                    raise IndexError("Boom!")
                subboom()

            parser = CommandLineParser()
            parser.parse(["boom"])

            try:
                parser.execute()
            except IndexError:
                _, _, exc_traceback = sys.exc_info()
                self.assertIn(
                    "subboom()\n",
                    traceback.format_exc(),
                    msg="Lost some stack frames when re-raising!",
                )
            else:
                self.fail("execute() should have raised an IndexError!")
 def setUp(self):
     self.parser = CommandLineParser()
     self.default_dir = os.path.join("/user", get_current_username())
class CommandLineParserInternalConfigTest(unittest2.TestCase):
    def setUp(self):
        self.parser = CommandLineParser()
        self.default_dir = os.path.join("/user", get_current_username())


    def assert_namenode_spec(self, host, port, version=None):
        self.assertEqual(self.parser.args.namenode, host)
        self.assertEqual(self.parser.args.port, port)
        if version:
            self.assertEqual(self.parser.args.version, version)

    def assert_namenodes_spec(self, host, port, version=None):
        for namenode in self.parser.namenodes:
            try:
                self.assertEqual(namenode.host, host)
                self.assertEqual(namenode.port, port)
                if version:
                    self.assertEqual(namenode.version, version)
            except AssertionError:
                continue
            # There was no AssertError -> we found our NN
            return
        self.fail("NN not found in namenodes")


    def test_cl_config_conflicted(self):

        self.parser.args = MockParseArgs(dir=["hdfs://*****:*****@patch.object(snakebite.config.HDFSConfig, 'get_external_config')
    @patch("snakebite.commandlineparser.CommandLineParser._read_config_snakebiterc", return_value=None)
    def test_config_no_config(self, config_mock, read_config_mock):
        hadoop_home = None
        config_mock.return_value = []
        if os.environ.get("HADOOP_HOME"):
            hadoop_home = os.environ["HADOOP_HOME"]
            del os.environ["HADOOP_HOME"]
        self.parser.args = MockParseArgs()
        with self.assertRaises(SystemExit):
            self.parser.read_config()

        if hadoop_home:
            os.environ["HADOOP_HOME"] = hadoop_home

        self.assert_namenode_spec(None, None)


    valid_snake_one_rc = {"namenode": "foobar", "version": 9, "port": 54310}
    valid_snake_ha_rc = [{"namenode": "foobar", "version": 9, "port": 54310},
                         {"namenode": "foobar2", "version": 9, "port": 54310}]

    invalid_snake_rc = "hdfs://*****:*****@patch("os.path.exists")
    def test_read_config_snakebiterc_one_valid(self, exists_mock):
        m = mock_open(read_data=json.dumps(self.valid_snake_one_rc))

        with patch("snakebite.commandlineparser.open", m, create=True):
            self.parser.args = MockParseArgs()
            self.parser.read_config()
            self.assert_namenodes_spec("foobar", 54310, 9)
            self.assertEquals(self.parser.args.usetrash, self.parser.configs['use_trash'])

    @patch("os.path.exists")
    def test_read_config_snakebiterc_ha_valid(self, exists_mock):
        m = mock_open(read_data=json.dumps(self.valid_snake_ha_rc))

        with patch("snakebite.commandlineparser.open", m, create=True):
            self.parser.args = MockParseArgs()
            self.parser.read_config()
            self.assert_namenodes_spec("foobar", 54310, 9)
            self.assert_namenodes_spec("foobar2", 54310, 9)
            self.assertEquals(self.parser.args.usetrash, self.parser.configs['use_trash'])

    @patch("os.path.exists")
    def test_read_config_snakebiterc_invalid(self, exists_mock):
        m = mock_open(read_data=json.dumps(self.invalid_snake_rc))

        with patch("snakebite.commandlineparser.open", m, create=True):
            self.parser.args = MockParseArgs()
            with self.assertRaises(SystemExit):
                self.parser.read_config()

    valid_snake_noport_one_rc = {"namenode": "foobar", "version": 11}
    valid_snake_noport_ha_rc = [{"namenode": "foobar", "version": 100},
                                {"namenode": "foobar2", "version": 100}]

    @patch("os.path.exists")
    def test_read_config_snakebiterc_noport_one_valid(self, exists_mock):
        m = mock_open(read_data=json.dumps(self.valid_snake_noport_one_rc))

        with patch("snakebite.commandlineparser.open", m, create=True):
            self.parser.args = MockParseArgs()
            self.parser.read_config()
            self.assert_namenodes_spec("foobar", Namenode.DEFAULT_PORT, 11)
            self.assertEquals(self.parser.args.usetrash, self.parser.configs['use_trash'])

    @patch("os.path.exists")
    def test_read_config_snakebiterc_noport_ha_valid(self, exists_mock):
        m = mock_open(read_data=json.dumps(self.valid_snake_noport_ha_rc))

        with patch("snakebite.commandlineparser.open", m, create=True):
            self.parser.args = MockParseArgs()
            self.parser.read_config()
            self.assert_namenodes_spec("foobar", Namenode.DEFAULT_PORT, 100)
            self.assert_namenodes_spec("foobar2", Namenode.DEFAULT_PORT, 100)
            self.assertEquals(self.parser.args.usetrash, self.parser.configs['use_trash'])


    valid_snake_noport_nov_one_rc = {"namenode": "foobar"}
    valid_snake_noport_nov_ha_rc = [{"namenode": "foobar"},
                                    {"namenode": "foobar2"}]

    @patch("os.path.exists")
    def test_read_config_snakebiterc_noport_nov_one_valid(self, exists_mock):
        m = mock_open(read_data=json.dumps(self.valid_snake_noport_nov_one_rc))

        with patch("snakebite.commandlineparser.open", m, create=True):
            self.parser.args = MockParseArgs()
            self.parser.read_config()
            self.assert_namenodes_spec("foobar", Namenode.DEFAULT_PORT, Namenode.DEFAULT_VERSION)
            self.assertEquals(self.parser.args.usetrash, self.parser.configs['use_trash'])

    @patch("os.path.exists")
    def test_read_config_snakebiterc_noport_nov_ha_valid(self, exists_mock):
        m = mock_open(read_data=json.dumps(self.valid_snake_noport_nov_ha_rc))

        with patch("snakebite.commandlineparser.open", m, create=True):
            self.parser.args = MockParseArgs()
            self.parser.read_config()
            self.assert_namenodes_spec("foobar", Namenode.DEFAULT_PORT, Namenode.DEFAULT_VERSION)
            self.assert_namenodes_spec("foobar2", Namenode.DEFAULT_PORT, Namenode.DEFAULT_VERSION)
            self.assertEquals(self.parser.args.usetrash, self.parser.configs['use_trash'])

    valid_snake_noport_mix_rc = [{"namenode": "foobar", "version": 100},
                                 {"namenode": "foobar2", "port": 66}]

    @patch("os.path.exists")
    def test_read_config_snakebiterc_noport_mix_valid(self, exists_mock):
        m = mock_open(read_data=json.dumps(self.valid_snake_noport_mix_rc))

        with patch("snakebite.commandlineparser.open", m, create=True):
            self.parser.args = MockParseArgs()
            self.parser.read_config()
            self.assert_namenodes_spec("foobar", Namenode.DEFAULT_PORT, 100)
            self.assert_namenodes_spec("foobar2", 66, Namenode.DEFAULT_VERSION)
            self.assertEquals(self.parser.args.usetrash, self.parser.configs['use_trash'])

    valid_snake_one_rc_v2 = {
                                "config_version": 2,
                                "use_trash": False,
                                "namenodes": [
                                    {"host": "foobar3", "version": 9, "port": 54310}
                                ]
                            }

    valid_snake_ha_rc_v2 = {
                                "config_version": 2,
                                "use_trash": True,
                                "namenodes": [
                                    {"host": "foobar4", "version": 9, "port": 54310},
                                    {"host": "foobar5", "version": 9, "port": 54310}
                                ]
                            }

    invalid_snake_rc_v2 = "hdfs://*****:*****@patch("os.path.exists")
    def test_read_config_snakebiterc_one_valid_v2(self, exists_mock):
        m = mock_open(read_data=json.dumps(self.valid_snake_one_rc_v2))

        with patch("snakebite.commandlineparser.open", m, create=True):
            self.parser.args = MockParseArgs()
            self.parser.read_config()
            self.assertFalse(self.parser.args.usetrash)
            self.assert_namenodes_spec("foobar3", 54310, 9)

    @patch("os.path.exists")
    def test_read_config_snakebiterc_ha_valid_v2(self, exists_mock):
        m = mock_open(read_data=json.dumps(self.valid_snake_ha_rc_v2))

        with patch("snakebite.commandlineparser.open", m, create=True):
            self.parser.args = MockParseArgs()
            self.parser.read_config()
            self.assertTrue(self.parser.args.usetrash)
            self.assert_namenodes_spec("foobar4", 54310, 9)
            self.assert_namenodes_spec("foobar5", 54310, 9)


    @patch("os.path.exists")
    def test_read_config_snakebiterc_invalid_v2(self, exists_mock):
        m = mock_open(read_data=json.dumps(self.invalid_snake_rc_v2))

        with patch("snakebite.commandlineparser.open", m, create=True):
            self.parser.args = MockParseArgs()
            with self.assertRaises(SystemExit):
                self.parser.read_config()


    valid_snake_noport_one_rc_v2 = {
                                    "config_version": 2,
                                    "use_trash": False,
                                    "namenodes": [
                                        {"host": "foobar3", "version": 9}
                                    ]
                                   }

    valid_snake_mix_ha_rc_v2 = {
                                   "config_version": 2,
                                   "use_trash": True,
                                   "namenodes": [
                                        {"host": "foobar4", "version": 100},
                                        {"host": "foobar5", "port": 54310}
                                    ]
                                  }

    @patch("os.path.exists")
    def test_read_config_snakebiterc_noport_one_valid_v2(self, exists_mock):
        m = mock_open(read_data=json.dumps(self.valid_snake_noport_one_rc_v2))

        with patch("snakebite.commandlineparser.open", m, create=True):
            self.parser.args = MockParseArgs()
            self.parser.read_config()
            self.assertFalse(self.parser.args.usetrash)
            self.assert_namenodes_spec("foobar3", Namenode.DEFAULT_PORT, 9)

    @patch("os.path.exists")
    def test_read_config_snakebiterc_mix_ha_valid_v2(self, exists_mock):
        m = mock_open(read_data=json.dumps(self.valid_snake_mix_ha_rc_v2))

        with patch("snakebite.commandlineparser.open", m, create=True):
            self.parser.args = MockParseArgs()
            self.parser.read_config()
            self.assertTrue(self.parser.args.usetrash)
            self.assert_namenodes_spec("foobar4", Namenode.DEFAULT_PORT, 100)
            self.assert_namenodes_spec("foobar5", 54310, Namenode.DEFAULT_VERSION)


    valid_user_rc_v2 = {
        "config_version": 2,
        "use_trash": True,
        "user": "******",
        "namenodes": [
            {"host": "foobar4", "version": 100},
            {"host": "foobar5", "port": 54310}
        ]
    }

    @patch("os.path.exists")
    def test_read_config_snakebiterc_user_valid_v2(self, exists_mock):
        m = mock_open(read_data=json.dumps(self.valid_user_rc_v2))

        with patch("snakebite.commandlineparser.open", m, create=True):
            self.parser.args = MockParseArgs()
            self.parser.read_config()
            self.parser.setup_client()
            self.assertTrue(self.parser.args.usetrash)
            self.assertEquals(self.parser.client.effective_user, "hdfs_user")
            self.assert_namenodes_spec("foobar4", Namenode.DEFAULT_PORT, 100)
            self.assert_namenodes_spec("foobar5", 54310, Namenode.DEFAULT_VERSION)


    def test_cl_default_port(self):
        self.parser.args = MockParseArgs(dir=["hdfs://foobar/user/rav"],
                                         single_arg="hdfs://foobar/user/rav",
                                         command="mv")
        self.parser.read_config()
        self.assert_namenode_spec("foobar", Namenode.DEFAULT_PORT)

    def test_cl_trash_setting_preserved_after_cl_config(self):
        # no snakebiterc
        # read config from CL
        self.parser.args = MockParseArgs(dir=["hdfs://*****:*****@patch("os.path.exists")
    def test_cl_trash_setting_preserved_after_snakebiterc_one_valid(self, exists_mock):
        m = mock_open(read_data=json.dumps(self.valid_snake_one_rc))

        with patch("snakebite.commandlineparser.open", m, create=True):
            self.parser.args = MockParseArgs(usetrash=True)
            self.parser.read_config()
            self.assert_namenodes_spec("foobar", 54310, 9)
            self.assertTrue(self.parser.args.usetrash)


    @patch('os.environ.get')
    def test_cl_usetrash_setting_preserved_after_external_nontrash_config(self, environ_get):
        environ_get.return_value = False
        # no snakebiterc
        # read external config (hdfs-site, core-site)
        self.parser.args = MockParseArgs(dir=["/user/rav/test"],
                                         usetrash=True,
                                         command="rm")
        try:
            HDFSConfig.core_try_paths = (ConfigTest.get_config_path('ha-core-site.xml'),)
            HDFSConfig.hdfs_try_paths = (ConfigTest.get_config_path('ha-noport-hdfs-site.xml'),)
            self.parser.init()

            self.assertTrue(self.parser.args.usetrash)
            self.assertTrue(self.parser.client.use_trash)
        finally:
            self._revert_hdfs_try_paths()

    @patch('os.environ.get')
    def test_cl_skiptrash_setting_preserved_after_external_nontrash_config(self, environ_get):
        environ_get.return_value = False
        # no snakebiterc
        # read external config (hdfs-site, core-site)
        self.parser.args = MockParseArgs(dir=["/user/rav/test"],
                                         skiptrash=True,
                                         usetrash=True,
                                         command="rm")
        try:
            HDFSConfig.core_try_paths = (ConfigTest.get_config_path('ha-core-site.xml'),)
            HDFSConfig.hdfs_try_paths = (ConfigTest.get_config_path('ha-noport-hdfs-site.xml'),)
            self.parser.init()

            self.assertTrue(self.parser.args.skiptrash)
            self.assertTrue(self.parser.args.usetrash)
            self.assertFalse(self.parser.client.use_trash)
        finally:
            self._revert_hdfs_try_paths()
Example #5
0
 def setUp(self):
     self.parser = CommandLineParser()
     self.default_dir = os.path.join("/user", get_current_username())
Example #6
0
class CommandLineParserInternalConfigTest(unittest2.TestCase):
    def setUp(self):
        self.parser = CommandLineParser()
        self.default_dir = os.path.join("/user", get_current_username())

    def assert_namenode_spec(self, host, port, version=None):
        self.assertEqual(self.parser.args.namenode, host)
        self.assertEqual(self.parser.args.port, port)
        if version:
            self.assertEqual(self.parser.args.version, version)

    def assert_namenodes_spec(self, host, port, version=None):
        for namenode in self.parser.namenodes:
            try:
                self.assertEqual(namenode.host, host)
                self.assertEqual(namenode.port, port)
                if version:
                    self.assertEqual(namenode.version, version)
            except AssertionError:
                continue
            # There was no AssertError -> we found our NN
            return
        self.fail("NN not found in namenodes")

    def test_cl_config_conflicted(self):

        self.parser.args = MockParseArgs(dir=[
            "hdfs://*****:*****@patch.object(snakebite.config.HDFSConfig, 'get_external_config')
    @patch(
        "snakebite.commandlineparser.CommandLineParser._read_config_snakebiterc",
        return_value=None)
    def test_config_no_config(self, config_mock, read_config_mock):
        hadoop_home = None
        config_mock.return_value = []
        if os.environ.get("HADOOP_HOME"):
            hadoop_home = os.environ["HADOOP_HOME"]
            del os.environ["HADOOP_HOME"]
        self.parser.args = MockParseArgs()
        with self.assertRaises(SystemExit):
            self.parser.read_config()

        if hadoop_home:
            os.environ["HADOOP_HOME"] = hadoop_home

        self.assert_namenode_spec(None, None)

    valid_snake_one_rc = {"namenode": "foobar", "version": 9, "port": 54310}
    valid_snake_ha_rc = [{
        "namenode": "foobar",
        "version": 9,
        "port": 54310
    }, {
        "namenode": "foobar2",
        "version": 9,
        "port": 54310
    }]

    invalid_snake_rc = "hdfs://*****:*****@patch("os.path.exists")
    def test_read_config_snakebiterc_one_valid(self, exists_mock):
        m = mock_open(read_data=json.dumps(self.valid_snake_one_rc))

        with patch("snakebite.commandlineparser.open", m, create=True):
            self.parser.args = MockParseArgs()
            self.parser.read_config()
            self.assert_namenodes_spec("foobar", 54310, 9)
            self.assertEqual(self.parser.args.usetrash,
                             self.parser.configs['use_trash'])

    @patch("os.path.exists")
    def test_read_config_snakebiterc_ha_valid(self, exists_mock):
        m = mock_open(read_data=json.dumps(self.valid_snake_ha_rc))

        with patch("snakebite.commandlineparser.open", m, create=True):
            self.parser.args = MockParseArgs()
            self.parser.read_config()
            self.assert_namenodes_spec("foobar", 54310, 9)
            self.assert_namenodes_spec("foobar2", 54310, 9)
            self.assertEqual(self.parser.args.usetrash,
                             self.parser.configs['use_trash'])

    @patch("os.path.exists")
    def test_read_config_snakebiterc_invalid(self, exists_mock):
        m = mock_open(read_data=json.dumps(self.invalid_snake_rc))

        with patch("snakebite.commandlineparser.open", m, create=True):
            self.parser.args = MockParseArgs()
            with self.assertRaises(SystemExit):
                self.parser.read_config()

    valid_snake_noport_one_rc = {"namenode": "foobar", "version": 11}
    valid_snake_noport_ha_rc = [{
        "namenode": "foobar",
        "version": 100
    }, {
        "namenode": "foobar2",
        "version": 100
    }]

    @patch("os.path.exists")
    def test_read_config_snakebiterc_noport_one_valid(self, exists_mock):
        m = mock_open(read_data=json.dumps(self.valid_snake_noport_one_rc))

        with patch("snakebite.commandlineparser.open", m, create=True):
            self.parser.args = MockParseArgs()
            self.parser.read_config()
            self.assert_namenodes_spec("foobar", Namenode.DEFAULT_PORT, 11)
            self.assertEqual(self.parser.args.usetrash,
                             self.parser.configs['use_trash'])

    @patch("os.path.exists")
    def test_read_config_snakebiterc_noport_ha_valid(self, exists_mock):
        m = mock_open(read_data=json.dumps(self.valid_snake_noport_ha_rc))

        with patch("snakebite.commandlineparser.open", m, create=True):
            self.parser.args = MockParseArgs()
            self.parser.read_config()
            self.assert_namenodes_spec("foobar", Namenode.DEFAULT_PORT, 100)
            self.assert_namenodes_spec("foobar2", Namenode.DEFAULT_PORT, 100)
            self.assertEqual(self.parser.args.usetrash,
                             self.parser.configs['use_trash'])

    valid_snake_noport_nov_one_rc = {"namenode": "foobar"}
    valid_snake_noport_nov_ha_rc = [{
        "namenode": "foobar"
    }, {
        "namenode": "foobar2"
    }]

    @patch("os.path.exists")
    def test_read_config_snakebiterc_noport_nov_one_valid(self, exists_mock):
        m = mock_open(read_data=json.dumps(self.valid_snake_noport_nov_one_rc))

        with patch("snakebite.commandlineparser.open", m, create=True):
            self.parser.args = MockParseArgs()
            self.parser.read_config()
            self.assert_namenodes_spec("foobar", Namenode.DEFAULT_PORT,
                                       Namenode.DEFAULT_VERSION)
            self.assertEqual(self.parser.args.usetrash,
                             self.parser.configs['use_trash'])

    @patch("os.path.exists")
    def test_read_config_snakebiterc_noport_nov_ha_valid(self, exists_mock):
        m = mock_open(read_data=json.dumps(self.valid_snake_noport_nov_ha_rc))

        with patch("snakebite.commandlineparser.open", m, create=True):
            self.parser.args = MockParseArgs()
            self.parser.read_config()
            self.assert_namenodes_spec("foobar", Namenode.DEFAULT_PORT,
                                       Namenode.DEFAULT_VERSION)
            self.assert_namenodes_spec("foobar2", Namenode.DEFAULT_PORT,
                                       Namenode.DEFAULT_VERSION)
            self.assertEqual(self.parser.args.usetrash,
                             self.parser.configs['use_trash'])

    valid_snake_noport_mix_rc = [{
        "namenode": "foobar",
        "version": 100
    }, {
        "namenode": "foobar2",
        "port": 66
    }]

    @patch("os.path.exists")
    def test_read_config_snakebiterc_noport_mix_valid(self, exists_mock):
        m = mock_open(read_data=json.dumps(self.valid_snake_noport_mix_rc))

        with patch("snakebite.commandlineparser.open", m, create=True):
            self.parser.args = MockParseArgs()
            self.parser.read_config()
            self.assert_namenodes_spec("foobar", Namenode.DEFAULT_PORT, 100)
            self.assert_namenodes_spec("foobar2", 66, Namenode.DEFAULT_VERSION)
            self.assertEqual(self.parser.args.usetrash,
                             self.parser.configs['use_trash'])

    valid_snake_one_rc_v2 = {
        "config_version": 2,
        "use_trash": False,
        "namenodes": [{
            "host": "foobar3",
            "version": 9,
            "port": 54310
        }]
    }

    valid_snake_ha_rc_v2 = {
        "config_version":
        2,
        "use_trash":
        True,
        "namenodes": [{
            "host": "foobar4",
            "version": 9,
            "port": 54310
        }, {
            "host": "foobar5",
            "version": 9,
            "port": 54310
        }]
    }

    invalid_snake_rc_v2 = "hdfs://*****:*****@patch("os.path.exists")
    def test_read_config_snakebiterc_one_valid_v2(self, exists_mock):
        m = mock_open(read_data=json.dumps(self.valid_snake_one_rc_v2))

        with patch("snakebite.commandlineparser.open", m, create=True):
            self.parser.args = MockParseArgs()
            self.parser.read_config()
            self.assertFalse(self.parser.args.usetrash)
            self.assert_namenodes_spec("foobar3", 54310, 9)

    @patch("os.path.exists")
    def test_read_config_snakebiterc_ha_valid_v2(self, exists_mock):
        m = mock_open(read_data=json.dumps(self.valid_snake_ha_rc_v2))

        with patch("snakebite.commandlineparser.open", m, create=True):
            self.parser.args = MockParseArgs()
            self.parser.read_config()
            self.assertTrue(self.parser.args.usetrash)
            self.assert_namenodes_spec("foobar4", 54310, 9)
            self.assert_namenodes_spec("foobar5", 54310, 9)

    @patch("os.path.exists")
    def test_read_config_snakebiterc_invalid_v2(self, exists_mock):
        m = mock_open(read_data=json.dumps(self.invalid_snake_rc_v2))

        with patch("snakebite.commandlineparser.open", m, create=True):
            self.parser.args = MockParseArgs()
            with self.assertRaises(SystemExit):
                self.parser.read_config()

    valid_snake_noport_one_rc_v2 = {
        "config_version": 2,
        "use_trash": False,
        "namenodes": [{
            "host": "foobar3",
            "version": 9
        }]
    }

    valid_snake_mix_ha_rc_v2 = {
        "config_version":
        2,
        "use_trash":
        True,
        "namenodes": [{
            "host": "foobar4",
            "version": 100
        }, {
            "host": "foobar5",
            "port": 54310
        }]
    }

    @patch("os.path.exists")
    def test_read_config_snakebiterc_noport_one_valid_v2(self, exists_mock):
        m = mock_open(read_data=json.dumps(self.valid_snake_noport_one_rc_v2))

        with patch("snakebite.commandlineparser.open", m, create=True):
            self.parser.args = MockParseArgs()
            self.parser.read_config()
            self.assertFalse(self.parser.args.usetrash)
            self.assert_namenodes_spec("foobar3", Namenode.DEFAULT_PORT, 9)

    @patch("os.path.exists")
    def test_read_config_snakebiterc_mix_ha_valid_v2(self, exists_mock):
        m = mock_open(read_data=json.dumps(self.valid_snake_mix_ha_rc_v2))

        with patch("snakebite.commandlineparser.open", m, create=True):
            self.parser.args = MockParseArgs()
            self.parser.read_config()
            self.assertTrue(self.parser.args.usetrash)
            self.assert_namenodes_spec("foobar4", Namenode.DEFAULT_PORT, 100)
            self.assert_namenodes_spec("foobar5", 54310,
                                       Namenode.DEFAULT_VERSION)

    valid_user_rc_v2 = {
        "config_version":
        2,
        "use_trash":
        True,
        "user":
        "******",
        "namenodes": [{
            "host": "foobar4",
            "version": 100
        }, {
            "host": "foobar5",
            "port": 54310
        }]
    }

    @patch("os.path.exists")
    def test_read_config_snakebiterc_user_valid_v2(self, exists_mock):
        m = mock_open(read_data=json.dumps(self.valid_user_rc_v2))

        with patch("snakebite.commandlineparser.open", m, create=True):
            self.parser.args = MockParseArgs()
            self.parser.read_config()
            self.parser.setup_client()
            self.assertTrue(self.parser.args.usetrash)
            self.assertEqual(self.parser.client.effective_user, "hdfs_user")
            self.assert_namenodes_spec("foobar4", Namenode.DEFAULT_PORT, 100)
            self.assert_namenodes_spec("foobar5", 54310,
                                       Namenode.DEFAULT_VERSION)

    def test_cl_default_port(self):
        self.parser.args = MockParseArgs(dir=["hdfs://foobar/user/rav"],
                                         single_arg="hdfs://foobar/user/rav",
                                         command="mv")
        self.parser.read_config()
        self.assert_namenode_spec("foobar", Namenode.DEFAULT_PORT)

    def test_cl_trash_setting_preserved_after_cl_config(self):
        # no snakebiterc
        # read config from CL
        self.parser.args = MockParseArgs(dir=["hdfs://*****:*****@patch("os.path.exists")
    def test_cl_trash_setting_preserved_after_snakebiterc_one_valid(
            self, exists_mock):
        m = mock_open(read_data=json.dumps(self.valid_snake_one_rc))

        with patch("snakebite.commandlineparser.open", m, create=True):
            self.parser.args = MockParseArgs(usetrash=True)
            self.parser.read_config()
            self.assert_namenodes_spec("foobar", 54310, 9)
            self.assertTrue(self.parser.args.usetrash)

    @patch('os.environ.get')
    def test_cl_usetrash_setting_preserved_after_external_nontrash_config(
            self, environ_get):
        environ_get.return_value = False
        # no snakebiterc
        # read external config (hdfs-site, core-site)
        self.parser.args = MockParseArgs(dir=["/user/rav/test"],
                                         usetrash=True,
                                         command="rm")
        try:
            HDFSConfig.core_try_paths = (
                ConfigTest.get_config_path('ha-core-site.xml'), )
            HDFSConfig.hdfs_try_paths = (
                ConfigTest.get_config_path('ha-noport-hdfs-site.xml'), )
            self.parser.init()

            self.assertTrue(self.parser.args.usetrash)
            self.assertTrue(self.parser.client.use_trash)
        finally:
            self._revert_hdfs_try_paths()

    @patch('os.environ.get')
    def test_cl_skiptrash_setting_preserved_after_external_nontrash_config(
            self, environ_get):
        environ_get.return_value = False
        # no snakebiterc
        # read external config (hdfs-site, core-site)
        self.parser.args = MockParseArgs(dir=["/user/rav/test"],
                                         skiptrash=True,
                                         usetrash=True,
                                         command="rm")
        try:
            HDFSConfig.core_try_paths = (
                ConfigTest.get_config_path('ha-core-site.xml'), )
            HDFSConfig.hdfs_try_paths = (
                ConfigTest.get_config_path('ha-noport-hdfs-site.xml'), )
            self.parser.init()

            self.assertTrue(self.parser.args.skiptrash)
            self.assertTrue(self.parser.args.usetrash)
            self.assertFalse(self.parser.client.use_trash)
        finally:
            self._revert_hdfs_try_paths()

    @patch('os.environ.get')
    def test_use_datanode_hostname(self, environ_get):
        environ_get.return_value = False
        # no snakebiterc
        # read external config (hdfs-site, core-site)
        self.parser.args = MockParseArgs()
        try:
            HDFSConfig.core_try_paths = (
                ConfigTest.get_config_path('ha-core-site.xml'), )
            HDFSConfig.hdfs_try_paths = (ConfigTest.get_config_path(
                'use-datanode-hostname-hdfs-site.xml'), )
            self.parser.init()

            self.assertTrue(self.parser.client.use_datanode_hostname)
        finally:
            self._revert_hdfs_try_paths()
Example #7
0
 def setUp(self):
     self.parser = CommandLineParser()
     self.default_dir = os.path.join("/user", pwd.getpwuid(os.getuid())[0])
 def setUp(self):
     self.parser = CommandLineParser()
     self.default_dir = os.path.join("/user", pwd.getpwuid(os.getuid())[0])