<commit_before>import json
import tempfile
import unittest

from eho.server.main import make_app
import os


class TestApi(unittest.TestCase):
    def setUp(self):
        self.db_fd, self.db_path = tempfile.mkstemp()
        self.maxDiff = 10000

        app = make_app(
            TESTING=True,
            RESET_DB=True,
            STUB_DATA=True,
            SQLALCHEMY_DATABASE_URI='sqlite:///' + self.db_path,
            SQLALCHEMY_ECHO=False
        )
        print 'Test db path: %s' % self.db_path

        self.app = app.test_client()

    def tearDown(self):
        os.close(self.db_fd)
        os.unlink(self.db_path)

    def test_list_node_templates(self):
        rv = self.app.get('/v0.1/node-templates.json')
        self.assertEquals(rv.status_code, 200)
        data = json.loads(rv.data)

        # clean all ids
        for idx in xrange(0, len(data.get(u'templates'))):
            del data.get(u'templates')[idx][u'id']
            del data.get(u'templates')[idx][u'node_type'][u'id']

        self.assertEquals(data, {
            u'templates': [
                {
                    u'job_tracker': {
                        u'heap_size': u'3072'
                    },
                    u'name': u'jt_nn.large',
                    u'tenant_id': u't_1',
                    u'node_type': {
                        u'processes': [
                            u'job_tracker',
                            u'name_node'
                        ],
                        u'name': u'JT+NN'
                    },
                    u'flavor_id': u'm1.large',
                    u'name_node': {
                        u'heap_size': u'3072'
                    }
                },
                {
                    u'job_tracker': {
                        u'heap_size': u'6144'
                    },
                    u'name': u'jt_nn.xlarge',
                    u'tenant_id': u't_1',
                    u'node_type': {
                        u'processes': [
                            u'job_tracker',
                            u'name_node'
                        ],
                        u'name': u'JT+NN'
                    },
                    u'flavor_id': u'm1.xlarge',
                    u'name_node': {
                        u'heap_size': u'6144'
                    }
                },
                {
                    u'job_tracker': {
                        u'heap_size': u'3072'
                    },
                    u'name': u'jt.large',
                    u'tenant_id': u't_1',
                    u'node_type': {
                        u'processes': [
                            u'job_tracker'
                        ],
                        u'name': u'JT'
                    },
                    u'flavor_id': u'm1.large'
                },
                {
                    u'job_tracker': {
                        u'heap_size': u'6144'
                    },
                    u'name': u'jt.xlarge',
                    u'tenant_id': u't_1',
                    u'node_type': {
                        u'processes': [
                            u'job_tracker'
                        ],
                        u'name': u'JT'
                    },
                    u'flavor_id': u'm1.xlarge'
                },
                {
                    u'name': u'nn.large',
                    u'tenant_id': u't_1',
                    u'node_type': {
                        u'processes': [
                            u'name_node'
                        ],
                        u'name': u'NN'
                    },
                    u'flavor_id': u'm1.large',
                    u'name_node': {
                        u'heap_size': u'3072'
                    }
                },
                {
                    u'name': u'nn.xlarge',
                    u'tenant_id': u't_1',
                    u'node_type': {
                        u'processes': [
                            u'name_node'
                        ],
                        u'name': u'NN'
                    }, u'flavor_id': u'm1.xlarge',
                    u'name_node': {
                        u'heap_size': u'6144'
                    }
                },
                {
                    u'name': u'tt_dn.medium',
                    u'task_tracker': {
                        u'heap_size': u'1536'
                    },
                    u'tenant_id': u't_1',
                    u'data_node': {
                        u'heap_size': u'1536'
                    },
                    u'node_type': {
                        u'processes': [
                            u'task_tracker',
                            u'data_node'
                        ],
                        u'name': u'TT+DN'
                    },
                    u'flavor_id': u'm1.medium'
                },
                {
                    u'name': u'tt_dn.large',
                    u'task_tracker': {
                        u'heap_size': u'3072'
                    },
                    u'tenant_id': u't_1',
                    u'data_node': {
                        u'heap_size': u'3072'
                    },
                    u'node_type': {
                        u'processes': [
                            u'task_tracker',
                            u'data_node'
                        ],
                        u'name': u'TT+DN'
                    },
                    u'flavor_id': u'm1.large'
                },
                {
                    u'name': u'tt_dn.xlarge',
                    u'task_tracker': {
                        u'heap_size': u'6144'
                    },
                    u'tenant_id': u't_1',
                    u'data_node': {
                        u'heap_size': u'6144'
                    },
                    u'node_type': {
                        u'processes': [
                            u'task_tracker',
                            u'data_node'
                        ],
                        u'name': u'TT+DN'},
                    u'flavor_id': u'm1.xlarge'
                }]})

    def test_list_clusters(self):
        rv = self.app.get('/v0.1/clusters.json')
        self.assertEquals(rv.status_code, 200)
        data = json.loads(rv.data)

        self.assertEquals(data, {
            u'clusters': []
        })


if __name__ == '__main__':
    unittest.main()<commit_msg>some tests has been added<commit_after>import json
import tempfile
import unittest

from eho.server.main import make_app
import eventlet
import os


class TestApi(unittest.TestCase):
    def setUp(self):
        self.db_fd, self.db_path = tempfile.mkstemp()
        self.maxDiff = 10000

        app = make_app(
            TESTING=True,
            RESET_DB=True,
            STUB_DATA=True,
            SQLALCHEMY_DATABASE_URI='sqlite:///' + self.db_path,
            SQLALCHEMY_ECHO=False
        )
        print 'Test db path: %s' % self.db_path

        self.app = app.test_client()

    def tearDown(self):
        os.close(self.db_fd)
        os.unlink(self.db_path)

    def test_list_node_templates(self):
        rv = self.app.get('/v0.1/node-templates.json')
        self.assertEquals(rv.status_code, 200)
        data = json.loads(rv.data)

        # clean all ids
        for idx in xrange(0, len(data.get(u'templates'))):
            del data.get(u'templates')[idx][u'id']
            del data.get(u'templates')[idx][u'node_type'][u'id']

        self.assertEquals(data, self._get_templates_stub_data())

    def test_create_node_template(self):
        rv = self.app.post('/v0.1/node-templates.json', data=json.dumps(dict(
            name='test_template',
            node_type='JT+NN',
            tenant_id='test_tenant',
            flavor_id='test_flavor',
            configs={
                'job_tracker': {
                    'heap_size': '1234'
                },
                'name_node': {
                    'heap_size': '2345'
                }
            }
        )))
        self.assertEquals(rv.status_code, 200)
        data = json.loads(rv.data)

        # clean all ids
        del data[u'id']
        del data.get(u'node_type')[u'id']

        self.assertEquals(data, {
            u'job_tracker': {
                u'heap_size': u'1234'
            }, u'name': u'test_template',
            u'tenant_id': u'test_tenant',
            u'node_type': {
                u'processes': [
                    u'job_tracker', u'name_node'
                ],
                u'name': u'JT+NN'
            },
            u'flavor_id': u'test_flavor',
            u'name_node': {
                u'heap_size': u'2345'
            }
        })

    def test_list_clusters(self):
        rv = self.app.get('/v0.1/clusters.json')
        self.assertEquals(rv.status_code, 200)
        data = json.loads(rv.data)

        self.assertEquals(data, {
            u'clusters': []
        })

    def test_create_clusters(self):
        rv = self.app.post('/v0.1/clusters.json', data=json.dumps(dict(
            name='test-cluster',
            base_image_id='base-image-id',
            tenant_id='tenant-id',
            templates={
                'jt_nn.xlarge': 1,
                'tt_dn.large': 5
            }
        )))
        self.assertEquals(rv.status_code, 200)
        data = json.loads(rv.data)

        cluster_id = data.pop(u'id')

        self.assertEquals(data, {
            u'status': u'Starting',
            u'service_urls': {},
            u'name': u'test-cluster',
            u'tenant_id': u'tenant-id',
            u'base_image_id': u'base-image-id',
            u'node_templates': {
                u'jt_nn.xlarge': 1,
                u'tt_dn.large': 5
            },
            u'nodes': []
        })

        eventlet.sleep(3)

        rv = self.app.get('/v0.1/clusters/%s.json' % cluster_id)
        self.assertEquals(rv.status_code, 200)
        data = json.loads(rv.data)
        self.assertEquals(data.pop(u'id'), cluster_id)

        # clean all ids
        for idx in xrange(0, len(data.get(u'nodes'))):
            del data.get(u'nodes')[idx][u'vm_id']
            del data.get(u'nodes')[idx][u'node_template'][u'id']

        self.assertEquals(data, {
            u'status': u'Active',
            u'service_urls': {},
            u'name': u'test-cluster',
            u'tenant_id': u'tenant-id',
            u'base_image_id': u'base-image-id',
            u'node_templates': {
                u'jt_nn.xlarge': 1,
                u'tt_dn.large': 5
            },
            u'nodes': [
                {u'node_template': {u'name': u'jt_nn.xlarge'}},
                {u'node_template': {u'name': u'tt_dn.large'}},
                {u'node_template': {u'name': u'tt_dn.large'}},
                {u'node_template': {u'name': u'tt_dn.large'}},
                {u'node_template': {u'name': u'tt_dn.large'}},
                {u'node_template': {u'name': u'tt_dn.large'}}
            ]
        })

    def _get_templates_stub_data(self):
        return {
            u'templates': [
                {
                    u'job_tracker': {
                        u'heap_size': u'3072'
                    },
                    u'name': u'jt_nn.large',
                    u'tenant_id': u't_1',
                    u'node_type': {
                        u'processes': [
                            u'job_tracker',
                            u'name_node'
                        ],
                        u'name': u'JT+NN'
                    },
                    u'flavor_id': u'm1.large',
                    u'name_node': {
                        u'heap_size': u'3072'
                    }
                },
                {
                    u'job_tracker': {
                        u'heap_size': u'6144'
                    },
                    u'name': u'jt_nn.xlarge',
                    u'tenant_id': u't_1',
                    u'node_type': {
                        u'processes': [
                            u'job_tracker',
                            u'name_node'
                        ],
                        u'name': u'JT+NN'
                    },
                    u'flavor_id': u'm1.xlarge',
                    u'name_node': {
                        u'heap_size': u'6144'
                    }
                },
                {
                    u'job_tracker': {
                        u'heap_size': u'3072'
                    },
                    u'name': u'jt.large',
                    u'tenant_id': u't_1',
                    u'node_type': {
                        u'processes': [
                            u'job_tracker'
                        ],
                        u'name': u'JT'
                    },
                    u'flavor_id': u'm1.large'
                },
                {
                    u'job_tracker': {
                        u'heap_size': u'6144'
                    },
                    u'name': u'jt.xlarge',
                    u'tenant_id': u't_1',
                    u'node_type': {
                        u'processes': [
                            u'job_tracker'
                        ],
                        u'name': u'JT'
                    },
                    u'flavor_id': u'm1.xlarge'
                },
                {
                    u'name': u'nn.large',
                    u'tenant_id': u't_1',
                    u'node_type': {
                        u'processes': [
                            u'name_node'
                        ],
                        u'name': u'NN'
                    },
                    u'flavor_id': u'm1.large',
                    u'name_node': {
                        u'heap_size': u'3072'
                    }
                },
                {
                    u'name': u'nn.xlarge',
                    u'tenant_id': u't_1',
                    u'node_type': {
                        u'processes': [
                            u'name_node'
                        ],
                        u'name': u'NN'
                    }, u'flavor_id': u'm1.xlarge',
                    u'name_node': {
                        u'heap_size': u'6144'
                    }
                },
                {
                    u'name': u'tt_dn.medium',
                    u'task_tracker': {
                        u'heap_size': u'1536'
                    },
                    u'tenant_id': u't_1',
                    u'data_node': {
                        u'heap_size': u'1536'
                    },
                    u'node_type': {
                        u'processes': [
                            u'task_tracker',
                            u'data_node'
                        ],
                        u'name': u'TT+DN'
                    },
                    u'flavor_id': u'm1.medium'
                },
                {
                    u'name': u'tt_dn.large',
                    u'task_tracker': {
                        u'heap_size': u'3072'
                    },
                    u'tenant_id': u't_1',
                    u'data_node': {
                        u'heap_size': u'3072'
                    },
                    u'node_type': {
                        u'processes': [
                            u'task_tracker',
                            u'data_node'
                        ],
                        u'name': u'TT+DN'
                    },
                    u'flavor_id': u'm1.large'
                },
                {
                    u'name': u'tt_dn.xlarge',
                    u'task_tracker': {
                        u'heap_size': u'6144'
                    },
                    u'tenant_id': u't_1',
                    u'data_node': {
                        u'heap_size': u'6144'
                    },
                    u'node_type': {
                        u'processes': [
                            u'task_tracker',
                            u'data_node'
                        ],
                        u'name': u'TT+DN'},
                    u'flavor_id': u'm1.xlarge'
                }
            ]
        }


if __name__ == '__main__':
    unittest.main()
{'fraction_non_alphanumeric': 0.1199630314232902, 'fraction_numerical': 0.013493530499075786, 'mean_word_length': 0.8265811388701328, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2729716', 'n_tokens_mistral': 4911, 'n_tokens_neox': 4464, 'n_words': 592}