コード例 #1
0
    def setUp(self):
        print("")
        self.dmg = DataManager(backend_endpoint=backend_address)
        print('Data manager', self.dmg)

        # Initialize and load ... no reset
        assert self.dmg.user_login('admin', 'admin')
        result = self.dmg.load()
コード例 #2
0
    def setUp(self):
        print("")
        print("setting up ...")
        self.dmg = DataManager(backend_endpoint=backend_address)
        print('Data manager', self.dmg)

        # Initialize and do not load
        assert self.dmg.user_login('admin', 'admin', load=False)
コード例 #3
0
class Test3LoadCreate(unittest2.TestCase):
    def setUp(self):
        print("")

        self.dmg = DataManager(backend_endpoint=backend_address)
        print('Data manager', self.dmg)

    def tearDown(self):
        print("")

    def test_3_1_load(self):
        print("")
        print('test load as admin')

        # Initialize and load ... no reset
        assert self.dmg.user_login('admin', 'admin')
        result = self.dmg.load()
        print("Result:", result)
        self.assertEqual(result, 0)  # No new objects created ...

        # Initialize and load ... with reset
        result = self.dmg.load(reset=True)
        print("Result:", result)
        # Must not have loaded any objects ... behavior changed, no more objects loading on login
        self.assertEqual(result, 0)

    def test_3_3_get_errors(self):
        print("")
        print('test get errors')

        # Initialize and load ... no reset
        assert self.dmg.user_login('admin', 'admin')
        result = self.dmg.load()
        print("Result:", result)
        assert result == 0  # No new objects created ...

        # Get users error
        item = self.dmg.get_user('unknown')
        assert not item
        item = self.dmg.get_realm('unknown')
        assert not item
        item = self.dmg.get_host('unknown')
        assert not item
        item = self.dmg.get_service('unknown')
        assert not item
        item = self.dmg.get_command('unknown')
        assert not item
コード例 #4
0
    def setUp(self):
        print ""
        self.dmg = DataManager(backend_endpoint=backend_address)
        print 'Data manager', self.dmg

        # Initialize and load ... no reset
        assert self.dmg.user_login('admin', 'admin')
        result = self.dmg.load()
コード例 #5
0
    def test_1_1_find_objects(self):
        print('test find_objects - no objects in cache')

        # Create new datamanager - do not use default backend address
        datamanager = DataManager(backend_endpoint=backend_address)
        self.assertIsNotNone(datamanager.backend)
        self.assertFalse(datamanager.loaded)
        self.assertIsNone(datamanager.get_logged_user())
        # Got known managed elements classes
        self.assertEqual(len(datamanager.known_classes), 19)

        # Login ...
        assert datamanager.backend.login('admin', 'admin')
        assert datamanager.loaded == False
        assert datamanager.backend.connected
        print('logged in as admin in the backend')
        # Datamanager is not yet aware of the user login !!!
        assert datamanager.get_logged_user() is None

        # Get current user
        # 'name' is not existing!
        parameters = {'where': {"name": "admin"}}
        items = datamanager.backend.get('user', params=parameters)
        print(items)
        assert len(items) == 1
        assert items[0]["_id"]
        admin_id = items[0]["_id"]

        users = datamanager.find_object('user', admin_id)
        print(users)
        assert len(users) == 1
        # New user object created in the DM cache ...
        self.assertEqual(datamanager.get_objects_count('user', refresh=True),
                         1)

        # Unknown user not found
        with assert_raises(ValueError) as cm:
            datamanager.find_object('user', 'fake_id')
        ex = cm.exception
        print(ex)
        assert str(
            ex
        ) == """user, search: {'max_results': 50, 'where': '{"_id": "%s"}', 'page': 0} was not found in the backend""" % 'fake_id'
コード例 #6
0
def user_authentication(username, password):
    """
    Authenticate a user thanks to his username / password

    The authentication is requested near the data manager. This functions uses the data manager
    of the current session, else it creates a new one.

    Stores the authenticated User object in the session to make it available
    """

    logger.info("user_authentication, authenticating: %s", username)

    # Session...
    session = request.environ['beaker.session']

    # Get backend in the server session (if it exists ... else create)
    if 'datamanager' not in session:
        logger.info(
            "user authentication, creating a new data manager in the session..."
        )
        logger.info(
            "backend: %s",
            request.app.config.get('alignak_backend', 'http://127.0.0.1:5000'))
        session['datamanager'] = DataManager(
            request.app.config.get('alignak_backend', 'http://127.0.0.1:5000'))

    # Set user for the data manager and try to log-in.
    if not session['datamanager'].user_login(
            username, password, load=(password is not None)):
        session['message'] = session['datamanager'].connection_message
        logger.warning("user authentication refused: %s", session['message'])
        return False

    # Create a new target user in the session
    if 'target_user' not in session:
        session['target_user'] = User()

    session['message'] = session['datamanager'].connection_message
    session['current_user'] = session['datamanager'].get_logged_user()
    logger.debug("user_authentication, current user authenticated")
    return True
コード例 #7
0
class test_5_basic_tests(unittest2.TestCase):

    def setUp(self):
        print ""
        self.dmg = DataManager(backend_endpoint=backend_address)
        print 'Data manager', self.dmg

        # Initialize and load ... no reset
        assert self.dmg.user_login('admin', 'admin')
        result = self.dmg.load()

    def tearDown(self):
        print ""
        # Logout
        self.dmg.reset(logout=True)
        assert not self.dmg.backend.connected
        assert self.dmg.get_logged_user() == None
        assert self.dmg.loaded == False

    def test_5_1_status(self):
        print ''
        print 'test objects status'

        # Get users
        items = self.dmg.get_users()
        for item in items:
            print "Got", item
            assert item.get_id()
            icon_status = item.get_html_state()

        # Get commands
        items = self.dmg.get_commands()
        for item in items:
            print "Got: ", item
            assert item.get_id()
            icon_status = item.get_html_state()
コード例 #8
0
class test_3_load_create(unittest2.TestCase):

    def setUp(self):
        print ""

        self.dmg = DataManager(backend_endpoint=backend_address)
        print 'Data manager', self.dmg

    def tearDown(self):
        print ""

    def test_3_1_load(self):
        print ''
        print 'test load as admin'

        # Initialize and load ... no reset
        assert self.dmg.user_login('admin', 'admin')
        result = self.dmg.load()
        print "Result:", result
        assert result == 0  # No new objects created ...

        # Initialize and load ... with reset
        result = self.dmg.load(reset=True)
        print "Result:", result
        # Must have loaded some objects ...
        assert result != 0

    def test_3_3_get_errors(self):
        print ''
        print 'test get errors'

        # Initialize and load ... no reset
        assert self.dmg.user_login('admin', 'admin')
        result = self.dmg.load()
        print "Result:", result
        assert result == 0  # No new objects created ...

        # Get users error
        item = self.dmg.get_user('unknown')
        assert not item
コード例 #9
0
    def test_1_1_find_objects(self):
        print ''
        print 'test find_objects - no objects in cache'

        # Create new datamanager - do not use default backend address
        datamanager = DataManager(backend_endpoint=backend_address)
        assert datamanager.backend
        assert datamanager.loaded == False
        assert datamanager.get_logged_user() is None

        # Login ...
        assert datamanager.backend.login('admin', 'admin')
        assert datamanager.loaded == False
        assert datamanager.backend.authenticated
        print 'logged in as admin in the backend'
        # Datamanager is not yet aware of the user login !!!
        assert datamanager.get_logged_user() is None

        # Get current user
        # 'name' is not existing!
        parameters = {'where': '{"name":"admin"}'}
        items = datamanager.backend.get('contact', params=parameters)
        print items
        assert '_items' in items
        assert len(items['_items']) == 1
        assert items['_items'][0]["_id"]
        admin_id = items['_items'][0]["_id"]

        users = datamanager.find_object('contact', admin_id)
        print users
        assert len(users) == 1
        # New user object created in the DM cache ...
        assert datamanager.get_objects_count('contact') == 1

        # Unknown user not found
        with assert_raises(ValueError) as cm:
            user = datamanager.find_object('contact', 'fake_id')
        ex = cm.exception
        print ex
        assert str(ex) == """contact, {"_id": "%s"} was not found in the cache nor in the backend""" % 'fake_id'
コード例 #10
0
class test_datatable(unittest2.TestCase):
    def setUp(self):
        print ""
        self.dmg = DataManager(backend_endpoint=backend_address)
        print 'Data manager', self.dmg

        # Initialize and load ... no reset
        assert self.dmg.user_login('admin', 'admin')
        result = self.dmg.load()

        # Test application
        self.app = TestApp(
            webapp
        )

    def tearDown(self):
        print ""
        # Logout
        self.dmg.reset(logout=True)
        assert not self.dmg.backend.connected
        assert self.dmg.get_logged_user() == None
        assert self.dmg.loaded == False

    def test_01_ccomands(self):
        print ''
        print 'test commands table'

        global items_count

        response = self.app.post('/login', {'username': '******', 'password': '******'})
        # Redirected twice: /login -> / -> /dashboard !
        redirected_response = response.follow()
        redirected_response = redirected_response.follow()

        print 'get page /commands_table'
        response = self.app.get('/commands_table')
        response.mustcontain(
            '<div id="commands_table">',
            "$('#tbl_command').DataTable( {",
            '<table id="tbl_command" class="table table-striped" cellspacing="0" width="100%">',
            '<th data-name="name" data-type="string">Command name</th>',
            '<th data-name="definition_order" data-type="integer">Definition order</th>',
            '<th data-name="command_line" data-type="string">Command line</th>',
            '<th data-name="module_type" data-type="string">Module type</th>',
            '<th data-name="enable_environment_macros" data-type="boolean">Enable environment macros</th>',
            '<th data-name="timeout" data-type="integer">Timeout</th>',
            '<th data-name="poller_tag" data-type="string">Poller tag</th>',
            '<th data-name="reactionner_tag" data-type="string">Reactionner tag</th>'
        )

        print 'change content with /commands_table_data'
        response = self.app.post('/commands_table_data')
        response_value = response.json
        print response_value
        # Temporary ...
        items_count = response.json['recordsTotal']
        # assert response.json['recordsTotal'] == items_count
        # assert response.json['recordsFiltered'] == items_count if items_count < BACKEND_PAGINATION_DEFAULT else BACKEND_PAGINATION_DEFAULT
        assert response.json['data']
        for x in range(0, items_count):
            if x < BACKEND_PAGINATION_DEFAULT:
                assert response.json['data'][x]
                assert response.json['data'][x]['name']
                assert response.json['data'][x]['definition_order']
                assert response.json['data'][x]['enable_environment_macros']
                assert response.json['data'][x]['command_line']
                assert response.json['data'][x]['timeout']
                assert response.json['data'][x]['poller_tag']
                assert response.json['data'][x]['reactionner_tag']
                assert response.json['data'][x]['enable_environment_macros']
                assert response.json['data'][x]['ui'] == True


        # Rows 5 by 5 ...
        for x in range(0, items_count, 5):
            response = self.app.post('/commands_table_data', {
                'draw': x / 5,
                'start': x,
                'length': 5
            })
            response_value = response.json
            print response_value
            assert response.json['draw'] == x / 5
            assert response.json['recordsTotal'] == items_count
            assert response.json['recordsFiltered'] == 5
            assert response.json['data']
            assert len(response.json['data']) == 5

        # Out of scope rows ...
        response = self.app.post('/commands_table_data', {
            'start': items_count+1,
            'length': 5
        })
        response_value = response.json
        print response_value
        assert response.json['recordsTotal'] == items_count
        assert response.json['recordsFiltered'] == items_count
        assert not response.json['data']

        # Sorting ...
        response = self.app.post('/commands_table_data', {
            'start': 0,
            'length': 5,
            'columns': json.dumps([
                {"data":"name","name":"name","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"definition_order","name":"definition_order","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"command_line","name":"command_line","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"module_type","name":"module_type","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"enable_environment_macros","name":"enable_environment_macros","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"timeout","name":"timeout","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"poller_tag","name":"poller_tag","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"reactionner_tag","name":"reactionner_tag","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
            ]),
            'order': json.dumps([{"column":0,"dir":"asc"}]) # Ascending
        })
        response_value = response.json
        print response_value
        assert response.json['recordsTotal'] == items_count
        assert response.json['recordsFiltered'] == 5
        assert response.json['data']
        assert len(response.json['data']) == 5

        response = self.app.post('/commands_table_data', {
            'start': 0,
            'length': 5,
            'columns': json.dumps([
                {"data":"name","name":"name","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"definition_order","name":"definition_order","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"command_line","name":"command_line","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"module_type","name":"module_type","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"enable_environment_macros","name":"enable_environment_macros","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"timeout","name":"timeout","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"poller_tag","name":"poller_tag","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"reactionner_tag","name":"reactionner_tag","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
            ]),
            'order': json.dumps([{"column":0,"dir":"desc"}])    # Descending !
        })
        response_value = response.json
        print response_value
        assert response.json['recordsTotal'] == items_count
        assert response.json['recordsFiltered'] == 5
        assert response.json['data']
        assert len(response.json['data']) == 5

        # Searching ...
        # Global search ...
        response = self.app.post('/commands_table_data', {
            'start': 0,
            'length': 5,
            'columns': json.dumps([
                {"data":"name","name":"name","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"definition_order","name":"definition_order","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"command_line","name":"command_line","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"module_type","name":"module_type","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"enable_environment_macros","name":"enable_environment_macros","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"timeout","name":"timeout","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"poller_tag","name":"poller_tag","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"reactionner_tag","name":"reactionner_tag","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
            ]),
            'order': json.dumps([{"column":0,"dir":"asc"}]),
            # Search 'open' in all columns without regex
            'search': json.dumps({"value":"check_ping","regex":False})
        })
        response_value = response.json
        print response_value
        # Found items_count records and sent 1
        assert response.json['recordsTotal'] == items_count
        assert response.json['recordsFiltered'] == 1
        assert response.json['data']
        assert len(response.json['data']) == 1

        response = self.app.post('/commands_table_data', {
            'start': 0,
            'length': 5,
            'columns': json.dumps([
                {"data":"name","name":"name","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"definition_order","name":"definition_order","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"command_line","name":"command_line","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"module_type","name":"module_type","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"enable_environment_macros","name":"enable_environment_macros","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"timeout","name":"timeout","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"poller_tag","name":"poller_tag","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"reactionner_tag","name":"reactionner_tag","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
            ]),
            'order': json.dumps([{"column":0,"dir":"asc"}]),
            # Search 'close' in all columns without regex
            'search': json.dumps({"value":"check_test","regex":False})
        })
        response_value = response.json
        print response_value
        # Not found!
        assert response.json['recordsTotal'] == items_count
        assert response.json['recordsFiltered'] == 0
        assert not response.json['data']

        response = self.app.post('/commands_table_data', {
            'start': 0,
            'length': 5,
            'columns': json.dumps([
                {"data":"name","name":"name","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"definition_order","name":"definition_order","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"command_line","name":"command_line","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"module_type","name":"module_type","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"enable_environment_macros","name":"enable_environment_macros","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"timeout","name":"timeout","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"poller_tag","name":"poller_tag","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"reactionner_tag","name":"reactionner_tag","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
            ]),
            'order': json.dumps([{"column":0,"dir":"asc"}]),
            # Search 'open' in all columns with regex
            'search': json.dumps({"value":"check","regex":True})
        })
        response_value = response.json
        print response_value
        assert response.json['recordsTotal'] == items_count
        assert response.json['recordsFiltered'] == items_count
        assert response.json['data']
        assert len(response.json['data']) == 5


        # Searching ...
        # Individual search ...
        response = self.app.post('/commands_table_data', {
            'start': 0,
            'length': 5,
            'columns': json.dumps([
                # Search 'check_ping' in name column ...
                {"data":"name","name":"name","searchable":True,"orderable":True,"search":{"value":"check_ping","regex":False}},
                {"data":"definition_order","name":"definition_order","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"command_line","name":"command_line","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"module_type","name":"module_type","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"enable_environment_macros","name":"enable_environment_macros","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"timeout","name":"timeout","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"poller_tag","name":"poller_tag","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"reactionner_tag","name":"reactionner_tag","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
            ]),
            'order': json.dumps([{"column":0,"dir":"asc"}]),
        })
        response_value = response.json
        print response_value
        assert response.json['recordsTotal'] == items_count
        assert response.json['recordsFiltered'] == 1
        assert response.json['data']
        assert len(response.json['data']) == 1

        response = self.app.post('/commands_table_data', {
            'start': 0,
            'length': 5,
            'columns': json.dumps([
                # Search 'op' in status column ...
                {"data":"name","name":"name","searchable":True,"orderable":True,"search":{"value":"check","regex":False}},
                {"data":"definition_order","name":"definition_order","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"command_line","name":"command_line","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"module_type","name":"module_type","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"enable_environment_macros","name":"enable_environment_macros","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"timeout","name":"timeout","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"poller_tag","name":"poller_tag","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"reactionner_tag","name":"reactionner_tag","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
            ]),
            'order': json.dumps([{"column":0,"dir":"asc"}]),
        })
        response_value = response.json
        print response_value
        assert response.json['recordsTotal'] == items_count
        assert response.json['recordsFiltered'] == 0
        assert not response.json['data']

        response = self.app.post('/commands_table_data', {
            'start': 0,
            'length': 5,
            'columns': json.dumps([
                # Search 'check' in name column ... regex True
                {"data":"name","name":"name","searchable":True,"orderable":True,"search":{"value":"check","regex":True}},
                {"data":"definition_order","name":"definition_order","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"command_line","name":"command_line","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"module_type","name":"module_type","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"enable_environment_macros","name":"enable_environment_macros","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"timeout","name":"timeout","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"poller_tag","name":"poller_tag","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
                {"data":"reactionner_tag","name":"reactionner_tag","searchable":True,"orderable":True,"search":{"value":"","regex":False}},
            ]),
            'order': json.dumps([{"column":0,"dir":"asc"}]),
        })
        response_value = response.json
        print response_value
        assert response.json['recordsTotal'] == items_count
        assert response.json['recordsFiltered'] == items_count
        assert response.json['data']
        assert len(response.json['data']) == 5


    def test_02_hosts(self):
        print ''
        print 'test hosts table'

        global items_count

        response = self.app.post('/login', {'username': '******', 'password': '******'})
        # Redirected twice: /login -> / -> /dashboard !
        redirected_response = response.follow()
        redirected_response = redirected_response.follow()

        print 'get page /sessions_table'
        response = self.app.get('/hosts_table')
        response.mustcontain(
            '<div id="hosts_table">',
            "$('#tbl_host').DataTable( {",
            '<th data-name="name" data-type="string">Host name</th>',
            '<th data-name="definition_order" data-type="integer">Definition order</th>',
            '<th data-name="alias" data-type="string">Host alias</th>',
            '<th data-name="display_name" data-type="string">Host display name</th>',
            '<th data-name="address" data-type="string">Address</th>',
            '<th data-name="check_command" data-type="objectid">Check command</th>',
            '<th data-name="check_command_args" data-type="string">Check command arguments</th>',
            '<th data-name="active_checks_enabled" data-type="boolean">Active checks enabled</th>',
            '<th data-name="passive_checks_enabled" data-type="boolean">Passive checks enabled</th>',
            '<th data-name="parents" data-type="list">Parents</th>',
            '<th data-name="hostgroups" data-type="list">Hosts groups</th>',
            '<th data-name="business_impact" data-type="integer">Business impact</th>'
        )

        response = self.app.post('/hosts_table_data')
        response_value = response.json
        print response_value
        # Temporary
        items_count = response.json['recordsTotal']
        # assert response.json['recordsTotal'] == items_count
        # assert response.json['recordsFiltered'] == items_count if items_count < BACKEND_PAGINATION_DEFAULT else BACKEND_PAGINATION_DEFAULT
        assert response.json['data']
        for x in range(0, items_count+0):
            # Only if lower than default pagination ...
            if x < BACKEND_PAGINATION_DEFAULT:
                assert response.json['data'][x]
                assert response.json['data'][x]['name']
                assert response.json['data'][x]['ui'] == True
コード例 #11
0
class Test4NotAdmin(unittest2.TestCase):
    def setUp(self):
        print("")
        self.dmg = DataManager(backend_endpoint=backend_address)
        print('Data manager', self.dmg)

    def tearDown(self):
        print("")

    def test_4_1_load(self):
        print("")
        print('test load not admin user')

        # Initialize and load ... no reset
        assert self.dmg.user_login('admin', 'admin')
        result = self.dmg.load()
        print("Result:", result)
        assert result == 0  # No new objects created ...

        # Get main realm
        realm_all = self.dmg.get_realm({'where': {'name': 'All'}})

        # Get main TP
        tp_all = self.dmg.get_timeperiod({'where': {'name': '24x7'}})

        # Create a non admin user ...
        # Create a new user
        print('create a user')
        data = {
            "name": "not_admin",
            "alias": "Testing user - not administrator",
            "min_business_impact": 0,
            "email": "*****@*****.**",
            "is_admin": False,
            "expert": False,
            "can_submit_commands": False,
            "host_notifications_enabled": True,
            "host_notification_period": tp_all.id,
            "host_notification_commands": [],
            "host_notification_options": ["d", "u", "r"],
            "service_notifications_enabled": True,
            "service_notification_period": tp_all.id,
            "service_notification_commands": [],
            "service_notification_options": ["w", "u", "c", "r"],
            "note": "Monitoring template : default",
            "definition_order": 100,
            "address1": "",
            "address2": "",
            "address3": "",
            "address4": "",
            "address5": "",
            "address6": "",
            "pager": "",
            "notificationways": [],
            "_realm": realm_all.id
        }
        new_user_id = self.dmg.add_user(data)
        print("New user id: %s" % new_user_id)

        # Logout
        self.dmg.reset(logout=True)
        assert not self.dmg.backend.connected
        assert self.dmg.get_logged_user() is None
        assert self.dmg.loaded == False

        # Login as not_admin created user
        assert self.dmg.user_login('not_admin', 'NOPASSWORDSET', load=False)
        assert self.dmg.backend.connected
        assert self.dmg.get_logged_user().get_username() == 'not_admin'
        print('logged in as not_admin')

        # Initialize and load ...
        result = self.dmg.load()
        print("Result:", result)
        print("Objects count:", self.dmg.get_objects_count())
        # assert result == 0                          # Only the newly created user, so no new objects loaded
        # assert self.dmg.get_objects_count() == 1    # not_admin user

        # Initialize and load ... with reset
        result = self.dmg.load(reset=True)
        print("Result:", result)
        print("Objects count:", self.dmg.get_objects_count())
        # assert result == 3                          # not_admin user + test_service + relation
        # assert self.dmg.get_objects_count() == 3    # not_admin user + test_service + relation

        # Not admin user can see only its own data, ...
        # -------------------------------------------

        # Do not check the length because the backend contains more elements than needed ...
        # dump_backend(not_admin_user=True, test_service=True)

        # Get users
        items = self.dmg.get_users()
        print("Users:", items)
        # assert len(items) == 1
        # 1 user only ...

        # Get commands
        items = self.dmg.get_commands()
        print("Commands:", items)
        # assert len(items) == 1

        # Get realms
        items = self.dmg.get_realms()
        print("Commands:", items)
        # assert len(items) == 1

        # Get timeperiods
        items = self.dmg.get_timeperiods()
        print("Commands:", items)
        # assert len(items) == 1

        # Get hosts
        items = self.dmg.get_hosts()
        print("Hosts:", items)
        # assert len(items) == 1

        # Get services
        items = self.dmg.get_services()
        print("Services:", items)
        # assert len(items) == 1

        result = self.dmg.delete_user(new_user_id)
        # Cannot delete the current logged-in user
        assert not result

        # Logout
        self.dmg.reset(logout=True)
        assert not self.dmg.backend.connected
        assert self.dmg.get_logged_user() is None
        assert self.dmg.loaded == False

        # Login as admin
        assert self.dmg.user_login('admin', 'admin', load=False)
        assert self.dmg.backend.connected
        assert self.dmg.get_logged_user().get_username() == 'admin'

        result = self.dmg.delete_user(new_user_id)
        # Can delete the former logged-in user
        assert result
コード例 #12
0
 def setUp(self):
     print ""
     self.dmg = DataManager(backend_endpoint=backend_address)
     print 'Data manager', self.dmg
コード例 #13
0
class test_4_not_admin(unittest2.TestCase):

    def setUp(self):
        print ""
        self.dmg = DataManager(backend_endpoint=backend_address)
        print 'Data manager', self.dmg

    def tearDown(self):
        print ""

    def test_4_1_load(self):
        print ''
        print 'test load not admin user'

        # Initialize and load ... no reset
        assert self.dmg.user_login('admin', 'admin')
        result = self.dmg.load()
        print "Result:", result
        assert result == 0  # No new objects created ...

        # Create a non admin user ...
        # TODO
        # ***************************************
        return

        # Logout
        self.dmg.reset(logout=True)
        assert not self.dmg.backend.connected
        assert self.dmg.get_logged_user() == None
        assert self.dmg.loaded == False

        # Login as not_admin created user
        assert self.dmg.user_login('not_admin', 'NOPASSWORDSET', load=False)
        assert self.dmg.backend.authenticated
        assert self.dmg.get_logged_user().get_username() == 'not_admin'
        print 'logged in as not_admin'

        # Initialize and load ...
        result = self.dmg.load()
        print "Result:", result
        print "Objects count:", self.dmg.get_objects_count()
        assert result == 2                          # test_service + relation
        assert self.dmg.get_objects_count() == 3    # not_admin user + test_service + relation

        # Initialize and load ... with reset
        result = self.dmg.load(reset=True)
        print "Result:", result
        print "Objects count:", self.dmg.get_objects_count()
        assert result == 3                          # not_admin user + test_service + relation
        assert self.dmg.get_objects_count() == 3    # not_admin user + test_service + relation


        # Not admin user can see only its own data, ...
        # -------------------------------------------

        # Do not check the length because the backend contains more elements than needed ...
        dump_backend(not_admin_user=True, test_service=True)


        # Get users
        items = self.dmg.get_users()
        assert len(items) == 1
        # 1 user only ...

        # Get services
        items = self.dmg.get_userservices()
        assert len(items) == 1

        # Get users / services relations
        items = self.dmg.get_userservice_users()
        assert len(items) == 1

        # Get service cdrs
        items = self.dmg.get_userservice_cdrs()
        assert len(items) == 0

        # Get sessions
        items = self.dmg.get_sessions()
        assert len(items) == 0
コード例 #14
0
    def test_2_1_creation_load(self):
        print ''
        print 'test creation'

        datamanager = DataManager()
        assert datamanager.backend
        assert datamanager.loaded == False
        assert datamanager.get_logged_user() == None
        print 'Data manager', datamanager

        # Initialize and load fail ...
        result = datamanager.load()
        # Refused because no backend logged-in user
        assert not result

        # Login error
        assert not datamanager.user_login('admin', 'fake')
        print datamanager.connection_message
        assert datamanager.connection_message == 'Backend is not available'
        print datamanager.logged_in_user
        assert not datamanager.logged_in_user

        # Create new datamanager - do not use default backend address
        datamanager = DataManager(backend_endpoint=backend_address)
        assert datamanager.backend
        assert datamanager.loaded == False
        assert datamanager.get_logged_user() == None
        print 'Data manager', datamanager

        # Initialize and load fail ...
        result = datamanager.load()
        # Refused because no backend logged-in user
        assert not result

        # Login error
        assert not datamanager.user_login('admin', 'fake')
        print datamanager.connection_message
        assert datamanager.connection_message == 'Backend connection refused...'
        print datamanager.logged_in_user
        assert not datamanager.logged_in_user

        # User login but do not load yet
        assert datamanager.user_login('admin', 'admin', load=False)
        assert datamanager.connection_message == 'Connection successful'
        print datamanager.logged_in_user
        assert datamanager.logged_in_user
        assert datamanager.get_logged_user() != None
        assert datamanager.get_logged_user().get_username() == 'admin'
        assert datamanager.get_logged_user().authenticated
        user_token = datamanager.get_logged_user().get_token()

        datamanager.reset()
        # Still logged-in...
        assert datamanager.logged_in_user
        assert datamanager.get_logged_user() != None

        datamanager.reset(logout=True)
        # Logged-out...
        assert not datamanager.logged_in_user
        assert datamanager.get_logged_user() == None

        # User login with an authentication token
        assert datamanager.user_login(user_token)
        # assert datamanager.connection_message == 'Backend connected'
        # When user authentication is made thanks to a token, DM is not loaded ... it is assumed that load already occured!

        assert datamanager.user_login('admin', 'admin', load=False)
        user_token = datamanager.get_logged_user().get_token()
        assert datamanager.user_login(user_token)
        assert datamanager.connection_message == 'Backend connected'


        assert datamanager.logged_in_user
        assert datamanager.get_logged_user() != None
        assert datamanager.get_logged_user().get_username() == 'admin'
        assert datamanager.get_logged_user().authenticated
コード例 #15
0
    def test_2_1_creation_load(self):
        print('------------------------------')
        print('test creation')

        datamanager = DataManager()
        assert datamanager.backend
        assert datamanager.loaded == False
        assert datamanager.get_logged_user() is None
        print('Data manager', datamanager)
        # Got known managed elements classes
        self.assertEqual(len(datamanager.known_classes), 19)

        # Initialize and load fail ...
        print('DM load failed')
        result = datamanager.load()
        # Refused because no backend logged-in user
        assert not result

        # Login error
        print('DM logging bad password')
        assert not datamanager.user_login('admin', 'fake')
        print(datamanager.connection_message)
        assert datamanager.connection_message == 'Backend connection refused...'
        print(datamanager.logged_in_user)
        assert not datamanager.logged_in_user

        # Create new datamanager - do not use default backend address
        print('DM initialization')
        datamanager = DataManager(backend_endpoint=backend_address)
        assert datamanager.backend
        assert datamanager.loaded == False
        assert datamanager.get_logged_user() is None
        print('Data manager', datamanager)

        # Initialize and load fail ...
        print('DM load fail')
        result = datamanager.load()
        # Refused because no backend logged-in user
        assert not result

        # Login error
        print('DM logging bad password')
        assert not datamanager.user_login('admin', 'fake')
        print(datamanager.connection_message)
        assert datamanager.connection_message == 'Backend connection refused...'
        print(datamanager.logged_in_user)
        assert not datamanager.logged_in_user

        # User login but do not load yet
        print('DM login ok')
        assert datamanager.user_login('admin', 'admin', load=False)
        assert datamanager.connection_message == 'Connection successful'
        print("Logged user: %s" % datamanager.logged_in_user)
        assert datamanager.logged_in_user
        assert datamanager.get_logged_user() is not None
        assert datamanager.get_logged_user().id is not None
        assert datamanager.get_logged_user().get_username() == 'admin'
        assert datamanager.get_logged_user().authenticated
        user_token = datamanager.get_logged_user().token
        print(User._cache[datamanager.get_logged_user().id].__dict__)

        print('DM reset')
        datamanager.reset()
        # Still logged-in...
        assert datamanager.logged_in_user
        assert datamanager.get_logged_user() is not None

        print('DM reset - logout')
        datamanager.reset(logout=True)
        # Logged-out...
        assert not datamanager.logged_in_user
        assert datamanager.get_logged_user() is None

        # User login with an authentication token
        print('DM login - token')
        assert datamanager.user_login(user_token)
        # When user authentication is made thanks to a token, DM is not loaded ... it is assumed that load already occured!

        print('DM login')
        assert datamanager.user_login('admin', 'admin', load=False)
        print(datamanager.get_logged_user())
        print(datamanager.get_logged_user().token)
        user_token = datamanager.get_logged_user().token
        assert datamanager.user_login(user_token)
        assert datamanager.connection_message == 'Connection successful'

        assert datamanager.logged_in_user
        assert datamanager.get_logged_user() is not None
        assert datamanager.get_logged_user().id is not None
        assert datamanager.get_logged_user().get_username() == 'admin'
        assert datamanager.get_logged_user().authenticated
コード例 #16
0
class TestLiveState(unittest2.TestCase):
    def setUp(self):
        print("")
        print("setting up ...")
        self.dmg = DataManager(backend_endpoint=backend_address)
        print('Data manager', self.dmg)

        # Initialize and do not load
        assert self.dmg.user_login('admin', 'admin', load=False)

    def tearDown(self):
        print("")
        print("tearing down ...")
        # Logout
        self.dmg.reset(logout=True)

    def test_get(self):
        print("")
        print('test get livestate')

        count = 5

        # Get livestate
        print('Get livestate - 1')
        search = {'page': 1, 'max_results': count}
        objs = self.dmg.get_livestate(search=search)
        self.assertEqual(len(objs), count)  # Backend pagination limit ...
        for obj in objs:
            print("Got: ", obj)
            assert obj.id
            self.assertIsInstance(obj.host, Host)  # Must be an object
            self.assertIsInstance(obj.host.check_command, Command)
            self.assertIsInstance(obj.host.check_period, TimePeriod)
            if obj.type == 'service':
                self.assertIsInstance(obj.service,
                                      Service)  # Must be an object
                self.assertIsInstance(obj.service.check_command, Command)
                self.assertIsInstance(obj.service.check_period, TimePeriod)
            else:
                self.assertEqual(obj.service, "service")  # No linked object
            livestate = self.dmg.get_livestate({'where': {'_id': obj.id}})
            livestate = livestate[0]
            print("Got: %s" % livestate)

        # Get livestate (bis)
        print('Get livestate - 2')
        search = {'page': 1, 'max_results': count}
        objs = self.dmg.get_livestate(search=search)
        self.assertEqual(len(objs), count)  # Backend pagination limit ...
        lv = LiveState()
        for obj in objs:
            print("Got: ", obj)
            lv = LiveState(obj)  # An object from another object
            print("Got: %s" % lv)

        # Get livestate (ter)
        print('Get livestate - 3')
        search = {'page': 1, 'max_results': count}
        result = self.dmg.backend.get('livestate', search, all_elements=False)
        for item in result:
            # Create a new object
            lv = LiveState(item)
            print("Got: %s" % lv)
コード例 #17
0
class Test6Relations(unittest2.TestCase):
    def setUp(self):
        print("")
        print("setting up ...")
        self.dmg = DataManager(backend_endpoint=backend_address)
        print('Data manager', self.dmg)

        # Initialize and do not load
        assert self.dmg.user_login('admin', 'admin', load=False)

    def tearDown(self):
        print("")
        print("tearing down ...")
        # Logout
        self.dmg.reset(logout=True)

    def test_01_host_command(self):
        print("--- test Item")

        # Get main realm
        self.dmg.get_realm({'where': {'name': 'All'}})

        # Get main TP
        self.dmg.get_timeperiod({'where': {'name': '24x7'}})

        # Get host
        host = self.dmg.get_host({'where': {'name': 'webui'}})

        print(host.__dict__)
        print(host.check_period)
        assert isinstance(host.check_command, Command)
        assert host.check_command

    def test_02_host_service(self):
        print("--- test Item")

        # Get main realm
        self.dmg.get_realm({'where': {'name': 'All'}})

        # Get main TP
        self.dmg.get_timeperiod({'where': {'name': '24x7'}})

        # Get host
        host = self.dmg.get_host({'where': {'name': 'webui'}})
        print("Host: ", host.__dict__)

        # Get services of this host
        service = self.dmg.get_service(
            {'where': {
                'name': 'Shinken2-broker',
                'host_name': host.id
            }})
        print("Services: ", service)
コード例 #18
0
 def setUp(self):
     print("")
     self.dmg = DataManager(backend_endpoint=backend_address)
     print('Data manager', self.dmg)
コード例 #19
0
class Test5Basic(unittest2.TestCase):
    def setUp(self):
        print("")
        self.dmg = DataManager(backend_endpoint=backend_address)
        print('Data manager', self.dmg)

        # Initialize and load ... no reset
        assert self.dmg.user_login('admin', 'admin')
        result = self.dmg.load()

    def tearDown(self):
        print("")
        # Logout
        self.dmg.reset(logout=True)
        assert not self.dmg.backend.connected
        assert self.dmg.get_logged_user() is None
        assert self.dmg.loaded == False

    def test_5_1_get_simple(self):
        print("")
        print('test objects get simple objects')

        # Get realms
        items = self.dmg.get_realms()
        for item in items:
            print("Got: ", item)
            assert item.id
            item.get_html_state()
        self.assertEqual(len(items), 5)

        # Get commands
        items = self.dmg.get_commands()
        for item in items:
            print("Got: ", item)
            assert item.id
            icon_status = item.get_html_state()
        self.assertEqual(len(items), 50)  # Backend pagination limit ...

        # Get timeperiods
        items = self.dmg.get_timeperiods()
        for item in items:
            print("Got: ", item)
            assert item.id
            item.get_html_state()
        self.assertEqual(len(items), 4)

    def test_5_1_get_linked(self):
        print("")
        print('test objects get linked')

        # Get hosts
        items = self.dmg.get_hosts()
        for item in items:
            print("Got: ", item)
            assert item.id
            self.assertIsInstance(item.check_command,
                                  Command)  # Must be an object
            self.assertIsInstance(item.check_period,
                                  TimePeriod)  # Must be an object
        self.assertEqual(len(items), 13)

        # Get services
        items = self.dmg.get_services()
        for item in items:
            print("Got: ", item)
            assert item.id
            self.assertIsInstance(item.check_command,
                                  Command)  # Must be an object
            self.assertIsInstance(item.check_period,
                                  TimePeriod)  # Must be an object
        self.assertEqual(len(items), 50)  # Backend pagination limit ...

        # Get livestate
        items = self.dmg.get_livestate()
        for item in items:
            print("Got: ", item)
            assert item.id
            self.assertIsInstance(item.host, Host)  # Must be an object
            if item.type == 'service':
                self.assertIsInstance(item.service,
                                      Service)  # Must be an object
            else:
                self.assertEqual(item.service, "service")  # No linked object
            livestate = self.dmg.get_livestate({'where': {'_id': item.id}})
            livestate = livestate[0]
            print("Got: %s" % livestate)
        self.assertEqual(len(items), 50)  # Backend pagination limit ...

    def test_5_1_get_linked_groups(self):
        print("")
        print('test objects get self linked')

        # Get hostgroups
        items = self.dmg.get_hostgroups()
        for item in items:
            print("Got: ", item)
            assert item.id
            if item.level != 0:
                self.assertIsInstance(item.parent,
                                      HostGroup)  # Must be an object
        self.assertEqual(len(items), 9)

        # Get servicegroups
        items = self.dmg.get_servicegroups()
        for item in items:
            print("Got: ", item)
            assert item.id
            if item.level != 0:
                self.assertIsInstance(item.parent,
                                      ServiceGroup)  # Must be an object
        self.assertEqual(len(items), 6)

    @unittest2.skip("Skipped because not very useful and often change :/")
    def test_5_2_total_count(self):
        print("")
        print('test objects count')

        # Get each object type count
        self.assertEqual(self.dmg.count_objects('realm'), 5)
        self.assertEqual(self.dmg.count_objects('command'), 103)
        self.assertEqual(self.dmg.count_objects('timeperiod'), 4)
        self.assertEqual(self.dmg.count_objects('user'), 5)
        self.assertEqual(self.dmg.count_objects('host'), 13)
        self.assertEqual(self.dmg.count_objects('service'), 94)
        self.assertEqual(self.dmg.count_objects('livestate'), 13 + 94)
        self.assertEqual(self.dmg.count_objects('servicegroup'), 6)
        self.assertEqual(self.dmg.count_objects('hostgroup'), 9)
        # self.assertEqual(self.dmg.count_objects('livesynthesis'), 1)

        # Use global method
        self.assertEqual(
            self.dmg.get_objects_count(object_type=None,
                                       refresh=True,
                                       log=True), 350)

        # No refresh so get current cached objects count
        self.assertEqual(self.dmg.get_objects_count('realm'), 5)
        self.assertEqual(self.dmg.get_objects_count('command'), 50)
        self.assertEqual(self.dmg.get_objects_count('timeperiod'), 4)
        self.assertEqual(self.dmg.get_objects_count('user'), 5)
        # Not loaded on login in the data manager ... so 0
        self.assertEqual(self.dmg.get_objects_count('host'), 0)
        self.assertEqual(self.dmg.get_objects_count('service'), 0)
        self.assertEqual(self.dmg.get_objects_count('livestate'), 0)
        # self.assertEqual(self.dmg.get_objects_count('livesynthesis'), 1)  # Not loaded on login ...

        # With refresh to get total backend objects count
        self.assertEqual(self.dmg.get_objects_count('realm', refresh=True), 5)
        self.assertEqual(self.dmg.get_objects_count('command', refresh=True),
                         103)
        self.assertEqual(
            self.dmg.get_objects_count('timeperiod', refresh=True), 4)
        self.assertEqual(self.dmg.get_objects_count('user', refresh=True), 5)
        self.assertEqual(self.dmg.get_objects_count('host', refresh=True), 13)
        self.assertEqual(self.dmg.get_objects_count('service', refresh=True),
                         94)
        self.assertEqual(self.dmg.get_objects_count('livestate', refresh=True),
                         13 + 94)
        # self.assertEqual(self.dmg.get_objects_count('livesynthesis', refresh=True), 1)

    def test_5_3_livesynthesis(self):
        print("")
        print('test livesynthesis')

        default_ls = {
            'hosts_synthesis': {
                'nb_elts': 0,
                'business_impact': 0,
                'warning_threshold': 2.0,
                'global_warning_threshold': 2.0,
                'critical_threshold': 5.0,
                'global_critical_threshold': 5.0,
                'nb_up': 0,
                'pct_up': 100.0,
                'nb_up_hard': 0,
                'nb_up_soft': 0,
                'nb_down': 0,
                'pct_down': 0.0,
                'nb_down_hard': 0,
                'nb_down_soft': 0,
                'nb_unreachable': 0,
                'pct_unreachable': 0.0,
                'nb_unreachable_hard': 0,
                'nb_unreachable_soft': 0,
                'nb_problems': 0,
                'pct_problems': 0.0,
                'nb_flapping': 0,
                'pct_flapping': 0.0,
                'nb_acknowledged': 0,
                'pct_acknowledged': 0.0,
                'nb_in_downtime': 0,
                'pct_in_downtime': 0.0,
            },
            'services_synthesis': {
                'nb_elts': 0,
                'business_impact': 0,
                'warning_threshold': 2.0,
                'global_warning_threshold': 2.0,
                'critical_threshold': 5.0,
                'global_critical_threshold': 5.0,
                'nb_ok': 0,
                'pct_ok': 100.0,
                'nb_ok_hard': 0,
                'nb_ok_soft': 0,
                'nb_warning': 0,
                'pct_warning': 0.0,
                'nb_warning_hard': 0,
                'nb_warning_soft': 0,
                'nb_critical': 0,
                'pct_critical': 0.0,
                'nb_critical_hard': 0,
                'nb_critical_soft': 0,
                'nb_unknown': 0,
                'pct_unknown': 0.0,
                'nb_unknown_hard': 0,
                'nb_unknown_soft': 0,
                'nb_problems': 0,
                'pct_problems': 0.0,
                'nb_flapping': 0,
                'pct_flapping': 0.0,
                'nb_acknowledged': 0,
                'pct_acknowledged': 0.0,
                'nb_in_downtime': 0,
                'pct_in_downtime': 0.0
            }
        }

        # Get livesynthesis
        self.dmg.get_livesynthesis()