mwielgoszewski/doorman

View on GitHub
tests/test_models.py

Summary

Maintainability
A
1 hr
Test Coverage
# -*- coding: utf-8 -*-
import datetime as dt
import pytest

from doorman.models import Node, Pack, Query, Tag, FilePath

from .factories import NodeFactory, PackFactory, QueryFactory, TagFactory


@pytest.mark.usefixtures('db')
class TestNode:

    def test_factory(self, db):
        node = NodeFactory(host_identifier='foo')
        db.session.commit()
        assert node.node_key is not None
        assert node.host_identifier == 'foo'

    def test_tags(self):
        tag = Tag.create(value='foo')
        node = NodeFactory(host_identifier='foo')
        node.tags.append(tag)
        node.save()
        assert tag in node.tags

    def test_config(self):
        node = NodeFactory(host_identifier='foo')
        tag = Tag.create(value='foo')
        node.tags.append(tag)
        node.save()

        query1 = Query.create(name='bar', sql='select * from osquery_info;')
        query2 = Query.create(name='foobar', sql='select * from system_info;')
        query2.tags.append(tag)
        query2.save()

        pack = Pack.create(name='baz')
        pack.queries.append(query1)
        pack.tags.append(tag)
        pack.save()

        file_path = FilePath.create(category='foobar', target_paths=[
            '/home/foobar/%%',
        ])
        file_path.tags.append(tag)
        file_path.save()

        assert tag in pack.tags
        assert tag in query2.tags
        assert tag in file_path.tags
        assert tag not in query1.tags
        assert query1 in pack.queries
        assert query2 not in pack.queries

        assert pack in node.packs
        assert query2 in node.queries
        assert query1 not in node.queries

        config = node.get_config()

        assert pack.name in config['packs']
        assert query1.name in config['packs'][pack.name]['queries']
        assert query1.sql == config['packs'][pack.name]['queries'][query1.name]['query']

        assert query2.name not in config['packs']
        assert query2.name in config['schedule']
        assert query2.sql == config['schedule'][query2.name]['query']

        assert file_path.category in config['file_paths']


@pytest.mark.usefixtures('db')
class TestQuery:

    def test_factory(self, db):
        query = QueryFactory(name='foobar', query='select * from foobar;')
        db.session.commit()

        assert query.name == 'foobar'
        assert query.sql == 'select * from foobar;'


@pytest.mark.usefixtures('db')
class TestFilePath:
    def test_create(self):
        target_paths = [
            '/root/.ssh/%%',
            '/home/.ssh/%%',
        ]

        file_path = FilePath.create(category='foobar', target_paths=target_paths)
        assert file_path.to_dict() == {'foobar': target_paths}

    def test_update(self):
        target_paths = [
            '/root/.ssh/%%',
            '/home/.ssh/%%',
        ]

        file_path = FilePath.create(category='foobar', target_paths=target_paths)
        assert file_path.to_dict() == {'foobar': target_paths}

        target_paths.append('/etc/%%')
        file_path.set_paths(*target_paths)
        file_path.save()
        assert file_path.to_dict() == {'foobar': target_paths}