Exemplo n.º 1
0
 def test_multiple_hostname(self, mock_path, mock_connect, mock_arg):
     argparse.ArgumentParser.parse_args = MagicMock()
     argparse.ArgumentParser.parse_args.return_value = argparse.Namespace(
         check=False,
         diff=False,
         file=None,
         hostname=None,
         login=None,
         passwd=None,
         port=None,
         post_snapfile=None,
         pre_snapfile=None,
         snap=False,
         snapcheck=False,
         verbosity=None,
         version=False)
     mock_path.return_value = os.path.join(os.path.dirname(__file__),
                                           'configs')
     js = SnapAdmin()
     conf_file = os.path.join(os.path.dirname(__file__), 'configs',
                              'main1.yml')
     config_file = open(conf_file, 'r')
     js.main_file = yaml.load(config_file)
     js.login("snap_1")
     hosts = ['10.209.16.203', '10.209.16.204', '10.209.16.205']
     self.assertEqual(js.host_list, hosts)
Exemplo n.º 2
0
    def test_sqlite_parameters_1(self, mock_login, mock_arg):
        js = SnapAdmin()
        argparse.ArgumentParser.parse_args = MagicMock()
        argparse.ArgumentParser.parse_args.return_value = argparse.Namespace(
            check=False,
            diff=False,
            file=None,
            hostname=None,
            login=None,
            passwd=None,
            port=None,
            post_snapfile=None,
            pre_snapfile=None,
            snap=False,
            snapcheck=False,
            verbosity=None,
            version=False)

        js.args.file = os.path.join(os.path.dirname(__file__), 'configs',
                                    'main_1.yml')
        js.args.snap = True
        js.args.check = False
        js.args.snapcheck = False
        js.args.diff = False
        js.args.pre_snapfile = "mock_snap"
        js.get_hosts()
        self.assertEqual(js.db, self.db)
Exemplo n.º 3
0
    def test_sqlite_parameters_5(self, mock_login, mock_arg):
        argparse.ArgumentParser.parse_args = MagicMock()
        argparse.ArgumentParser.parse_args.return_value = argparse.Namespace(
            check=False,
            diff=False,
            file=None,
            hostname=None,
            login=None,
            passwd=None,
            port=None,
            post_snapfile=None,
            pre_snapfile=None,
            snap=False,
            snapcheck=False,
            verbosity=None,
            version=False)

        js = SnapAdmin()
        js.args.file = os.path.join(os.path.dirname(__file__), 'configs',
                                    'main_5.yml')
        js.args.snap = False
        js.args.check = True
        js.args.snapcheck = False
        js.args.diff = False
        js.args.pre_snapfile = "mock_snap"
        self.db['store_in_sqlite'] = False
        self.db['check_from_sqlite'] = True
        self.db['db_name'] = 'jbb.db'
        self.db['first_snap_id'] = 0
        self.db['second_snap_id'] = 1
        js.get_hosts()
        self.assertEqual(js.db, self.db)
Exemplo n.º 4
0
    def test_check_mail(self, mock_path, mock_notify, mock_pass, mock_compare,
                        mock_arg):
        argparse.ArgumentParser.parse_args = MagicMock()
        argparse.ArgumentParser.parse_args.return_value = argparse.Namespace(
            check=False,
            diff=False,
            file=None,
            hostname=None,
            login=None,
            passwd=None,
            port=None,
            post_snapfile=None,
            pre_snapfile=None,
            snap=False,
            snapcheck=False,
            verbosity=None,
            version=False)

        js = SnapAdmin()
        js.args.file = os.path.join(os.path.dirname(__file__), 'configs',
                                    'main_mail_2.yml')
        js.args.check = True
        js.args.snap = False
        js.args.snapcheck = False
        js.args.pre_snapfile = "mock_snap"
        js.args.post_snapfile = "mock_snap2"
        mock_path.return_value = os.path.join(os.path.dirname(__file__),
                                              'configs')
        js.get_hosts()
        self.assertTrue(mock_notify.called)
        self.assertTrue(mock_pass.called)
        self.assertTrue(mock_compare.called)
Exemplo n.º 5
0
    def test_check_arguments_4(self, mock_log, mock_login, mock_sys, mock_arg):
        argparse.ArgumentParser.parse_args = MagicMock()
        argparse.ArgumentParser.parse_args.return_value = argparse.Namespace(
            check=False,
            diff=False,
            file=None,
            hostname=None,
            login=None,
            passwd=None,
            port=None,
            post_snapfile=None,
            pre_snapfile=None,
            snap=False,
            snapcheck=False,
            verbosity=None,
            version=False)

        js = SnapAdmin()
        js.args.snap = False
        js.args.file = os.path.join(os.path.dirname(__file__), 'configs',
                                    'main_3.yml')
        js.args.check = False
        js.args.snapcheck = False
        js.args.diff = True
        js.args.post_snapfile = None
        js.args.pre_snapfile = "mock_snap"
        with patch('jnpr.jsnapy.jsnapy.argparse.ArgumentParser.print_help'
                   ) as mock_parser:
            js.check_arguments()
            js.get_hosts()
            mock_sys.assert_called_with(1)
            mock_parser.assert_called_with()
Exemplo n.º 6
0
    def test_connect_diff(self, mock_compare, arg_exit):
        argparse.ArgumentParser.parse_args = MagicMock()
        argparse.ArgumentParser.parse_args.return_value = argparse.Namespace(
            check=False,
            diff=False,
            file=None,
            hostname=None,
            login=None,
            passwd=None,
            port=None,
            post_snapfile=None,
            pre_snapfile=None,
            snap=False,
            snapcheck=False,
            verbosity=None,
            version=False)

        js = SnapAdmin()
        js.args.file = os.path.join(os.path.dirname(__file__), 'configs',
                                    'main_1.yml')
        config_file = open(js.args.file, 'r')
        config_data = yaml.load(config_file)
        js.args.diff = True
        js.args.pre_snapfile = "mock_snap1"
        js.args.post_snapfile = "mock_snap2"
        js.get_hosts()
        mock_compare.assert_called_once_with('10.216.193.114', config_data,
                                             js.args.pre_snapfile, None, None)
Exemplo n.º 7
0
    def test_connect_snap(self, mock_log, mock_gen_reply, mock_dev, mock_arg):
        argparse.ArgumentParser.parse_args = MagicMock()
        argparse.ArgumentParser.parse_args.return_value = argparse.Namespace(
            check=False,
            diff=False,
            file=None,
            hostname=None,
            login=None,
            passwd=None,
            port=None,
            post_snapfile=None,
            pre_snapfile=None,
            snap=False,
            snapcheck=False,
            verbosity=None,
            version=False)

        js = SnapAdmin()
        js.args.file = os.path.join(os.path.dirname(__file__), 'configs',
                                    'main_1.yml')
        js.args.snap = True
        js.args.pre_snapfile = "mock_snap"
        js.get_hosts()
        self.assertTrue(mock_gen_reply.called)
        self.assertTrue(mock_dev.called)
Exemplo n.º 8
0
    def compare(self, hostname, presnap_timestamp, postsnap_timestamp, device_model):
        self.unpack(hostname, presnap_timestamp)
        self.unpack(hostname, postsnap_timestamp)

        check = SnapAdmin().check(str(self.generate_config(hostname, device_model)), pre_file=presnap_timestamp,
                         post_file=postsnap_timestamp, folder=os.environ['JSNAPY_HOME'])

        if len(check) <= 0:
            raise Exception('SnapAdmin() compare failed')

        self.unpack_cleanup(hostname, presnap_timestamp, postsnap_timestamp)


        # parse test_results into a normal / non-terrible structure for returning

        test_results = check[0].test_results
        pprint(test_results)
        final_results = OrderedDict()
        final_results['failedTests'] = {}
        for command_name, command_test_data in test_results.items():
            for test_data in command_test_data:
                if len(test_data['failed']) > 0:
                    if command_name not in final_results['failedTests']:
                        final_results['failedTests'][command_name] = []

                    for test in test_data['failed']:
                        final_results['failedTests'][command_name].append(test['message'])
                # else:
                #     for test in test_data['passed']:
                #         final_results['passedTests'].append(test['message'])

        return final_results
Exemplo n.º 9
0
 def test_check_arguments_test_file_3(self, mock_log, mock_login, mock_sys,
                                      mock_arg):
     js = SnapAdmin()
     js.args.snap = False
     js.args.file = None
     js.args.testfiles = [
         os.path.join(os.path.dirname(__file__), 'configs',
                      'test_diff.yml'),
         os.path.join(os.path.dirname(__file__), 'configs', 'tests.yml')
     ]
     js.args.check = False
     js.args.snapcheck = True
     js.args.diff = False
     js.args.login = "******"
     js.args.hostname = "10.216.193.114"
     js.args.passwd = "xyz"
     js.args.post_snapfile = "mock_snap2"
     js.args.pre_snapfile = "mock_snap"
     with patch('argparse.ArgumentParser.print_help') as mock_parser:
         js.check_arguments()
         js.get_hosts()
         self.assertTrue(js.main_file)
         self.assertEqual(js.main_file['hosts'][0]['device'],
                          "10.216.193.114")
         self.assertEqual(js.main_file['hosts'][0]['username'], "abc")
         self.assertEqual(js.main_file['hosts'][0]['passwd'], "xyz")
         self.assertEqual(js.main_file['tests'][0], js.args.testfiles[0])
         self.assertEqual(js.main_file['tests'][1], js.args.testfiles[1])
Exemplo n.º 10
0
 def test_extract_dev_data_invalid_config_data(self, mock_connect):
     with self.assertRaises(SystemExit):
         dev = Device(user='******', host='abc', passwd='xyz')
         dev.open()
         js = SnapAdmin()
         config_data = 1  # config_data no meaning
         js.snapcheck(config_data, 'mock_pre', dev)
Exemplo n.º 11
0
 def test_check_arguments_operation_lesser_parameter(self, mock_help, mock_exit):
     # if correct number of argument is not passed it will print help and exit
     js = SnapAdmin()
     js.args.snapcheck = True
     js.check_arguments()
     mock_help.assert_called()
     mock_exit.assert_called_with(1)
Exemplo n.º 12
0
 def test_extract_device_information_from_arguments(self):
     js = SnapAdmin()
     self.set_hardcoded_value_for_device(js)
     host_dict = {}
     js.extract_device_information(host_dict)
     hosts = ['1.1.1.1']
     self.assertEqual(js.host_list, hosts)
Exemplo n.º 13
0
 def test_check_diff_as_arg_test_empty_file(self, mock_comp):
     js = SnapAdmin()
     js.args.diff = True
     js.args.pre_snapfile = "first_file.xml"
     js.args.post_snapfile = "second_file.xml"
     js.check_diff_as_arg()
     self.assertFalse(mock_comp.called)
Exemplo n.º 14
0
    def test_hostname(self, mock_connect):
        argparse.ArgumentParser.parse_args = MagicMock()
        argparse.ArgumentParser.parse_args.return_value = argparse.Namespace(
            check=False,
            diff=False,
            file=None,
            hostname=None,
            login=None,
            passwd=None,
            port=None,
            post_snapfile=None,
            pre_snapfile=None,
            snap=False,
            snapcheck=False,
            verbosity=None,
            version=False)
        js = SnapAdmin()
        conf_file = os.path.join(os.path.dirname(__file__), 'configs',
                                 'main_6.yml')
        config_file = open(conf_file, 'r')
        js.main_file = yaml.load(config_file)
        js.login("snap_1")
        expected_calls_made = [
            call('10.216.193.114', 'abc', 'xyz', 'snap_1'),
            call('10.216.193.115', 'abc', 'xyz', 'snap_1'),
            call('10.216.193.116', 'abc', 'xyz', 'snap_1'),
        ]

        hosts = ['10.216.193.114', '10.216.193.115', '10.216.193.116']
        self.assertEqual(js.host_list, hosts)
        mock_connect.assert_has_calls(expected_calls_made, any_order=True)
Exemplo n.º 15
0
 def test_get_config_file_from_arguments(self):
     js = SnapAdmin()
     self.set_hardcoded_value_for_device(js)
     js.args.testfiles = ["main.yml"]
     js.get_config_file()
     local_dict = {'hosts': [{'device': '1.1.1.1', 'username': '******', 'passwd': '123'}], 'tests': ['main.yml']}
     self.assertEqual(js.main_file, local_dict)
Exemplo n.º 16
0
 def test_action_api_based_data_passed_in_string(self, mock_data):
     js = SnapAdmin()
     js.args.file = os.path.join(os.path.dirname(__file__), 'configs', 'main.yml')
     config_file = open(js.args.file, 'r')
     data = yaml.load(config_file, Loader=yaml.FullLoader)
     js.snapcheck(data, 'mock_file')
     mock_data.assert_called_with(data, 'mock_file', "snapcheck", None, local=False)
Exemplo n.º 17
0
 def test_extract_device_information_empty_mainfile(self, mock_log):
     js = SnapAdmin()
     js.main_file = None
     host_dict = {}
     js.extract_device_information(host_dict)
     mock_log.assert_called_with("\x1b[31m\nERROR occurred !! 'NoneType' object is not subscriptable",
                                 extra={'hostname': None})
Exemplo n.º 18
0
 def test_extract_test_cases_wrong_path(self):
     js = SnapAdmin()
     conf_file = os.path.join(os.path.dirname(__file__),
                              'configs', 'main.yml')
     config_file = open(conf_file, 'r')
     js.main_file = yaml.load(config_file, Loader=yaml.FullLoader)
     data = js.extract_test_cases(js.main_file)
     self.assertEqual(data, [])
Exemplo n.º 19
0
 def test_check_arguments_snap_operation(self, mock_help, mock_exit):
     # check arguments for snap operation
     js = SnapAdmin()
     js.args.snapcheck = True
     js.args.file = "main.yml"
     js.check_arguments()
     self.assertFalse(mock_exit.called)
     self.assertFalse(mock_help.called)
Exemplo n.º 20
0
 def test_sqlite_parameters_for_snap_not_checked(self, mock_mul_dev, mock_exit):
     js = SnapAdmin()
     js.args.file = os.path.join(os.path.dirname(__file__),
                                 'configs', 'main_1.yml')
     js.args.snap = True
     js.args.pre_snapfile = "mock_snap"
     js.start_process()
     self.assertEqual(js.db, self.db)
Exemplo n.º 21
0
 def test_extract_dev_data_device_closed(self, mock_dev, mock_path):
     mock_path.return_value = os.path.join(os.path.dirname(__file__), 'configs')
     with self.assertRaises(Exception):
         dev = Device(user='******', host='abc', passwd='xyz')
         dev.open()
         dev.close()
         js = SnapAdmin()
         js.args.file = 'main_local.yml'
         js.snapcheck(js.args.file, 'mock_pre', dev)
Exemplo n.º 22
0
 def test_check_diff_as_arg_test_file(self, mock_comp, mock_exit):
     js = SnapAdmin()
     js.args.diff = True
     js.args.pre_snapfile = os.path.join(os.path.dirname(__file__),
                                         'configs', '1.1.1.1_snap_not-range_pre_show_chassis_fpc.xml')
     js.args.post_snapfile = os.path.join(os.path.dirname(__file__),
                                          'configs', '1.1.1.1_snap_is-lt_pre_show_chassis_fpc.xml')
     js.check_diff_as_arg()
     self.assertTrue(mock_comp.called)
Exemplo n.º 23
0
 def test_get_config_file_from_file_exact_path(self):
     # config file is extracted when exact path is passed
     js = SnapAdmin()
     js.args.file = os.path.join(os.path.dirname(__file__),
                                 'configs', 'main.yml')
     js.get_config_file()
     config_file = open(js.args.file, 'r')
     config_file = yaml.load(config_file, Loader=yaml.FullLoader)
     self.assertEqual(js.main_file, config_file)
Exemplo n.º 24
0
 def test_extract_device_information_attribute_error(self, mock_log):
     js = SnapAdmin()
     conf_file = os.path.join(os.path.dirname(__file__),
                              'configs', 'main_false_keyError_device.yml')
     config_file = open(conf_file, 'r')
     js.main_file = yaml.load(config_file, Loader=yaml.FullLoader)
     host_dict = {}
     js.extract_device_information(host_dict)
     mock_log.assert_called_with("\x1b[31mERROR!! KeyError 'device' key not found", extra={'hostname': None})
Exemplo n.º 25
0
 def test_sqlite_parameters_for_snap(self, mock_mul_dev, mock_exit):
     js = SnapAdmin()
     js.args.file = os.path.join(os.path.dirname(__file__),
                                 'configs', 'main_2.yml')
     js.args.snap = True
     js.args.pre_snapfile = "mock_snap"
     self.db['store_in_sqlite'] = True
     self.db['db_name'] = 'jbb.db'
     js.start_process()
     self.assertEqual(js.db, self.db)
Exemplo n.º 26
0
 def test_check_arguments_wrong_operation(self, mock_help, mock_exit):
     # assert that if correct operation is not passed it will print help and exit
     js = SnapAdmin()
     js.args.snap = False
     js.args.snapcheck = False
     js.args.diff = False
     js.args.check = False
     js.check_arguments()
     mock_help.assert_called()
     mock_exit.assert_called_with(1)
Exemplo n.º 27
0
 def test_extract_device_information_keyerror(self, mock_log):
     js = SnapAdmin()
     conf_file = os.path.join(os.path.dirname(__file__),
                              'configs', 'main_false_keyError.yml')
     config_file = open(conf_file, 'r')
     js.main_file = yaml.load(config_file, Loader=yaml.FullLoader)
     host_dict = {}
     js.extract_device_information(host_dict)
     mock_log.assert_called_with("\x1b[31m\nERROR occurred !! Hostname not given properly 'hosts'",
                                 extra={'hostname': None})
Exemplo n.º 28
0
 def test_extract_device_information_from_file(self):
     js = SnapAdmin()
     js.args.file = os.path.join(os.path.dirname(__file__),
                                 'configs', 'main_1.yml')
     config_file = open(js.args.file, 'r')
     js.main_file = yaml.load(config_file, Loader=yaml.FullLoader)
     host_dict = {}
     js.extract_device_information(host_dict)
     hosts = ['1.1.1.1']
     self.assertEqual(js.host_list, hosts)
Exemplo n.º 29
0
 def test_check_arguments_check_operation(self, mock_help, mock_exit):
     # check arguments for check operation
     js = SnapAdmin()
     js.args.check = True
     js.args.file = "main.yml"
     js.args.pre_snapfile = "pre"
     js.args.post_snapfile = "post"
     js.check_arguments()
     self.assertFalse(mock_exit.called)
     self.assertFalse(mock_help.called)
Exemplo n.º 30
0
 def test_check_mail_password(
         self, mock_path, mock_notify, mock_pass, mock_compare, mock_arg):
     js = SnapAdmin()
     js.args.file = os.path.join(os.path.dirname(__file__),
                                 'configs', 'main_mail_2.yml')
     js.args.check = True
     js.args.pre_snapfile = "mock_snap"
     mock_path.return_value = os.path.join(os.path.dirname(__file__), 'configs')
     js.start_process()
     self.assertTrue(mock_pass.called)
     self.assertTrue(mock_notify.called)