Esempio n. 1
0
    def fill_database(self, node):
        db.create_all()
        d = Dimension.from_json(self.dim)
        d.current = True
        s1 = Server(id='00000000-0000-0000-0000-000000000001', name='node1', created_on=now, me=node == 'node1')
        g11 = Gate(id='00000000-0000-0000-0000-000000000011', server=s1, port=5000, dns=s1.name)
        s2 = Server(id='00000000-0000-0000-0000-000000000002', name='node2', created_on=now, me=node == 'node2')
        g12 = Gate(id='00000000-0000-0000-0000-000000000012', server=s2, port=5000, dns=s2.name)
        s3 = Server(id='00000000-0000-0000-0000-000000000003', name='node3', created_on=now, me=node == 'node3')
        g13 = Gate(id='00000000-0000-0000-0000-000000000013', server=s3, port=5000, dns=s3.name)
        s4 = Server(id='00000000-0000-0000-0000-000000000004', name='node4', created_on=now, me=node == 'node4')
        g14 = Gate(id='00000000-0000-0000-0000-000000000014', server=s4, port=5000, dns=s4.name)

        if node == 'node1':
            self.s1 = s1
            self.s2 = s2
            self.s3 = s3
            self.s4 = s4
            Route(s2, g12)
            Route(s3, s2, 1)
        elif node == 'node2':
            Route(s1, g11)
            Route(s3, g13)
        elif node == 'node3':
            Route(s1, s2, 1)
            Route(s2, g12)

        db.session.add_all([d, s1, s2, s3, s4])
        db.session.commit()
Esempio n. 2
0
    def _fill_database(self, app: Flask):
        with mock.patch('dimensigon.domain.entities.get_now') as mock_get_now:
            mock_get_now.return_value = defaults.INITIAL_DATEMARK
            node = app.config['SERVER_NAME']
            with app.app_context():
                db.create_all()
                event.listen(db.session, 'after_commit', receive_after_commit)
                set_initial(**self.initials)
                d = Dimension.from_json(self.dim)
                d.current = True
                s1 = Server('node1',
                            created_on=defaults.INITIAL_DATEMARK,
                            id=self.SERVER1,
                            me=node == 'node1')
                g11 = Gate(id='00000000-0000-0000-0000-000000000011',
                           server=s1,
                           port=5000,
                           dns=s1.name)
                s2 = Server('node2',
                            created_on=defaults.INITIAL_DATEMARK,
                            id=self.SERVER2,
                            me=node == 'node2')
                g12 = Gate(id='00000000-0000-0000-0000-000000000012',
                           server=s2,
                           port=5000,
                           dns=s2.name)
                s3 = Server('node3',
                            created_on=defaults.INITIAL_DATEMARK,
                            id=self.SERVER3,
                            me=node == 'node3')
                g13 = Gate(id='00000000-0000-0000-0000-000000000013',
                           server=s3,
                           port=5000,
                           dns=s3.name)

                if node == 'node1':
                    Route(s2, g12)
                    Route(s3, g13)
                elif node == 'node2':
                    Route(s1, g11)
                    Route(s3, g13)
                elif node == 'node3':
                    Route(s1, g11)
                    Route(s2, g12)

                self.fill_database()
                db.session.add_all([d, s1, s2, s3])
                db.session.commit()
            if node == 'node1':
                self.s1, self.s2, self.s3 = db.session.merge(
                    s1), db.session.merge(s2), db.session.merge(s3)
Esempio n. 3
0
    def test_routes_get(self):
        s2 = Server(id='123e4567-e89b-12d3-a456-426655440002', name='server2')
        g2 = Gate(id='123e4567-e89b-12d3-a456-426655440012',
                  server=s2,
                  port=5002,
                  dns=s2.name)
        Route(s2, g2, cost=0)
        s3 = Server(id='123e4567-e89b-12d3-a456-426655440003', name='server3')
        g3 = Gate(id='123e4567-e89b-12d3-a456-426655440013',
                  server=s3,
                  port=5003,
                  dns=s3.name)
        Route(s3, g3, cost=0)
        s4 = Server(id='123e4567-e89b-12d3-a456-426655440004', name='server4')
        g4 = Gate(id='123e4567-e89b-12d3-a456-426655440014',
                  server=s4,
                  port=5001,
                  dns=s4.name)
        Route(s4, s2, cost=1)
        db.session.add_all([s2, s3, s4])
        db.session.commit()

        response = self.client.get(url_for('api_1_0.routes', _external=False),
                                   headers=self.auth.header)
        data = response.get_json()
        self.assertDictEqual(
            {
                'server': {
                    'id': self.s1.id,
                    'name': self.s1.name
                },
                'route_list': [
                    dict(destination_id=s2.id,
                         gate_id=g2.id,
                         proxy_server_id=None,
                         cost=0),
                    dict(destination_id=s3.id,
                         gate_id=g3.id,
                         proxy_server_id=None,
                         cost=0),
                    dict(destination_id=s4.id,
                         gate_id=None,
                         proxy_server_id=s2.id,
                         cost=1)
                ]
            }, data)
Esempio n. 4
0
    def _fill_database(self):
        with mock.patch('dimensigon.domain.entities.get_now') as mock_get_now:
            mock_get_now.return_value = defaults.INITIAL_DATEMARK
            db.create_all()
            event.listen(db.session, 'after_commit', receive_after_commit)

            set_initial(**self.initials)
            d = Dimension.from_json(self.dim)
            d.current = True
            self.s1 = Server('node1',
                             created_on=defaults.INITIAL_DATEMARK,
                             id=self.SERVER,
                             me=True)
            self.g11 = Gate(id='00000000-0000-0000-0000-000000000011',
                            server=self.s1,
                            port=5000,
                            dns=self.s1.name)
            self.fill_database()
            db.session.add_all([d, self.s1])
            db.session.commit()
    def test_upgrade_catalog_no_data(self, mock_lock, mock_entities):
        mock_lock.return_value.__enter__.return_value = 'applicant'
        mock_entities.return_value = [('ActionTemplate', ActionTemplate)]

        s = Server('server',
                   last_modified_at=dt.datetime(2019,
                                                4,
                                                1,
                                                tzinfo=dt.timezone.utc))
        g = Gate(server=s, port=80)
        Route(s, cost=0)

        responses.add(
            method='GET',
            url=re.compile('^' + s.url(
                'api_1_0.catalog', data_mark='12345').replace('12345', '')),
            json={"ActionTemplate": []})

        upgrade_catalog_from_server(s)

        atl = [at.to_json() for at in ActionTemplate.query.all()]

        self.assertEqual(0, len(atl))
    def test_upgrade_catalog(self, mock_lock, mock_entities, mock_now,
                             mock_tzlocal):
        mock_lock.return_value.__enter__.return_value = 'applicant'
        mock_entities.return_value = [('ActionTemplate', ActionTemplate),
                                      ('Server', Server), ('Gate', Gate)]
        mock_now.return_value = dt.datetime(2019, 4, 1, tzinfo=dt.timezone.utc)
        mock_tzlocal.return_value = dt.timezone.utc

        at1 = ActionTemplate(id='aaaaaaaa-1234-5678-1234-56781234aaa1',
                             name='mkdir',
                             version=1,
                             action_type=ActionType.SHELL,
                             code='mkdir {dir}',
                             expected_output=None,
                             expected_rc=None,
                             system_kwargs={})
        db.session.add(at1)
        db.session.commit()

        s = Server(id='aaaaaaaa-1234-5678-1234-56781234bbb1',
                   name='server',
                   last_modified_at=dt.datetime(2019,
                                                4,
                                                1,
                                                tzinfo=dt.timezone.utc))
        s_json = s.to_json()
        g = Gate(server=s,
                 port=80,
                 dns='server',
                 last_modified_at=dt.datetime(2019,
                                              4,
                                              1,
                                              tzinfo=dt.timezone.utc))
        g_json = g.to_json()
        Route(s, cost=0)

        at2 = ActionTemplate(id='aaaaaaaa-1234-5678-1234-56781234aaa2',
                             name='rmdir',
                             version=1,
                             action_type=ActionType.SHELL,
                             code='rmdir {dir}',
                             expected_output=None,
                             expected_rc=None,
                             system_kwargs={},
                             last_modified_at=dt.datetime(
                                 2019, 4, 2, tzinfo=dt.timezone.utc))
        at2_json = at2.to_json()
        del at2

        at1_json = at1.to_json()
        del at1
        at1_json['code'] = 'mkdir -p {dir}'
        responses.add(
            method='GET',
            url=re.compile('^' + s.url(
                'api_1_0.catalog', data_mark='12345').replace('12345', '')),
            json={
                "ActionTemplate": [at1_json, at2_json],
                "Server": [s_json],
                "Gate": [g_json]
            })

        upgrade_catalog_from_server(s)

        db.session.expire_all()
        atl = [at.to_json() for at in ActionTemplate.query.all()]

        self.assertListEqual([at1_json, at2_json], atl)

        c = Catalog.query.get('ActionTemplate')
        self.assertEqual(dt.datetime(2019, 4, 2, tzinfo=dt.timezone.utc),
                         c.last_modified_at)

        at1 = ActionTemplate.query.get('aaaaaaaa-1234-5678-1234-56781234aaa1')
        self.assertEqual('mkdir -p {dir}', at.code)
Esempio n. 7
0
    def test_to_from_json(self):
        s = Server('test')
        g = Gate(server=s, dns='dns', port=8)

        g_json = g.to_json()
        self.assertEqual(g.dns, g_json['dns'])
        self.assertEqual(g.ip, g_json['ip'])
        self.assertEqual(g.port, g_json['port'])
        self.assertIsNotNone(g_json['server_id'])

        # set id to resolve server_id from gate object
        s = Server('test', id='aaaaaaaa-1234-5678-1234-56781234aaa1')
        g = Gate(server=s,
                 dns='dns',
                 port=8,
                 id='aaaaaaaa-1234-5678-1234-56781234aaa2')

        g_json = g.to_json(no_delete=True)
        self.assertDictEqual(
            {
                'server_id': 'aaaaaaaa-1234-5678-1234-56781234aaa1',
                'dns': 'dns',
                'ip': None,
                'port': 8,
                'hidden': False,
                'id': 'aaaaaaaa-1234-5678-1234-56781234aaa2'
            }, g_json)

        with self.assertRaises(NoResultFound):
            smashed = Gate.from_json(g_json)

        s = Server('test2', id='aaaaaaaa-1234-5678-1234-56781234aaa1')
        db.session.add(s)

        g_smashed = Gate.from_json(g_json)

        self.assertIsNot(g, g_smashed)
        self.assertEqual(g.dns, g_smashed.dns)
        self.assertEqual(g.ip, g_smashed.ip)
        self.assertEqual(g.port, g_smashed.port)
        self.assertIs(s, g_smashed.server)

        db.session.add(g_smashed)
        db.session.commit()

        g_json = g.to_json(no_delete=True)

        self.assertEqual(
            {
                'id': 'aaaaaaaa-1234-5678-1234-56781234aaa2',
                'server_id': 'aaaaaaaa-1234-5678-1234-56781234aaa1',
                'dns': 'dns',
                'ip': None,
                'port': 8,
                'hidden': False
            }, g_json)

        # check from_json when persisted in database
        smashed = Gate.from_json(g_json)

        self.assertIs(g_smashed, smashed)
        self.assertEqual(g_smashed.server, smashed.server)
        self.assertEqual(g_smashed.dns, smashed.dns)
        self.assertEqual(g_smashed.ip, smashed.ip)
        self.assertEqual(g_smashed.port, smashed.port)