def test_minimal_mandatory(self):
     with pytest.raises(ValueError):
         hivejdbc.HiveArgParser(host=DOMAIN,
                                port=PORT).parse()  # missing database
     with pytest.raises(ValueError):
         hivejdbc.HiveArgParser(database=DB,
                                port=PORT).parse()  # missing host
 def test_named_defaults(self):
     parser = hivejdbc.HiveArgParser(host=DOMAIN, database=DB, port=PORT)
     args = parser.parse()
     self.assertEqual(args.get('host'), DOMAIN)
     self.assertEqual(args.get('port'), PORT)
     self.assertEqual(args.get('database'), DB)
     self.assertEqual(args.get('driver'), None)
    def test_all(self):
        with tempfile.NamedTemporaryFile() as temp:
            temp.write(FILE_TEXT)
            temp.flush()

            parser = hivejdbc.HiveArgParser(host=DOMAIN,
                                            database=DB,
                                            port=PORT,
                                            principal=SERVICE,
                                            user_principal='*****@*****.**',
                                            user_keytab=temp.name,
                                            kdc='example.com:88',
                                            realm='EXAMPLE.COM',
                                            ssl=True,
                                            trust_store=temp.name,
                                            trust_password='******',
                                            properties={'a': 1},
                                            transport='binary',
                                            init_file='script.hsql',
                                            service_discovery_mode='zooKeeper',
                                            zookeeper_namespace='hive')
            args = parser.parse()
            self.assertEqual(args.get('principal'), SERVICE)
            self.assertEqual(args.get('user_principal'), '*****@*****.**')
            self.assertEqual(args.get('user_keytab'), temp.name)
            self.assertEqual(args.get('kdc'), 'example.com:88')
            self.assertEqual(args.get('realm'), 'EXAMPLE.COM')
            self.assertEqual(args.get('ssl'), True)
            self.assertEqual(args.get('trust_store'), temp.name)
            self.assertEqual(args.get('trust_password'), 'secret')
            self.assertDictEqual(args.get('properties'), {'a': 1})
            self.assertEqual(args.get('transport'), 'binary')
            self.assertEqual(args.get('init_file'), 'script.hsql')
            self.assertEqual(args.get('service_discovery_mode'), 'zooKeeper')
            self.assertEqual(args.get('zookeeper_namespace'), 'hive')
 def test_kerberos_minimal(self):
     # test kerberos related args
     parser = hivejdbc.HiveArgParser(host=DOMAIN,
                                     database=DB,
                                     port=PORT,
                                     principal=SERVICE)
     args = parser.parse()
     self.assertEqual(args.get('principal'), SERVICE)
 def test_minimal_defaults(self):
     parser = hivejdbc.HiveArgParser(DOMAIN, DB)
     args = parser.parse()
     self.assertEqual(args.get('host'), DOMAIN)
     self.assertEqual(args.get('port'), DEFAULT_PORT)
     self.assertEqual(args.get('database'), DB)
     self.assertEqual(args.get('driver'), None)
     self.assertDictEqual(args.get('properties'), {})
    def test_ssl(self):
        # ssl by itself
        # ssl + trust_store + password
        # errors on trust_store by itself, ssl + trust_store

        # test that 'ssl' can be set by itself
        parser = hivejdbc.HiveArgParser(host=DOMAIN,
                                        database=DB,
                                        port=PORT,
                                        ssl=True)
        args = parser.parse()
        self.assertTrue(args.get('ssl'))

        # ensure arguments are not allowed without `ssl` being set
        for arg in ['trust_store', 'trust_password']:
            with pytest.raises(ValueError):
                kwargs = {'host': DOMAIN, 'database': DB}
                kwargs[arg] = 'string'
                hivejdbc.HiveArgParser(**kwargs).parse()
    def test_kerberos_krb5(self):
        with tempfile.NamedTemporaryFile() as temp:
            temp.write(FILE_TEXT)
            temp.flush()

            parser = hivejdbc.HiveArgParser(host=DOMAIN,
                                            database=DB,
                                            port=PORT,
                                            principal=SERVICE,
                                            krb5_conf=temp.name)
            args = parser.parse()
            self.assertEqual(args.get('principal'), SERVICE)
            self.assertEqual(args.get('krb5_conf'), temp.name)
    def test_kerberos_keytab_adv(self):
        with tempfile.NamedTemporaryFile() as temp:
            temp.write(FILE_TEXT)
            temp.flush()

            parser = hivejdbc.HiveArgParser(host=DOMAIN,
                                            database=DB,
                                            port=PORT,
                                            principal=SERVICE,
                                            user_principal='*****@*****.**',
                                            user_keytab=temp.name,
                                            kdc='example.com:88',
                                            realm='EXAMPLE.COM')
            args = parser.parse()
            self.assertEqual(args.get('principal'), SERVICE)
            self.assertEqual(args.get('user_principal'), '*****@*****.**')
            self.assertEqual(args.get('user_keytab'), temp.name)
            self.assertEqual(args.get('kdc'), 'example.com:88')
            self.assertEqual(args.get('realm'), 'EXAMPLE.COM')