def populate_db(sqluri, service, nodes, user_range, host="loadtest.local"):
    """Create a bunch of users for the given service.

    The resulting users will have an adress in the form of <uid>@<host> where
    uid is an int from 0 to :param user_range:.

    This function is useful to populate the database during the loadtest. It
    allows to test a specific behaviour: making sure that we are not reading
    the values from memory when retrieving the node information.

    :param sqluri: the sqluri string used to connect to the database
    :param service: the service to assign the users to.
    :param nodes: the list of availables nodes for this service
    :param user_range: the number of users to create
    :param host: the hostname to use when generating users
    """
    params = {
        'service': service,
        'generation': 0,
        'client_state': '',
        'timestamp': int(time.time() * 1000),
    }
    # for each user in the range, assign him to a node
    md = SQLMetadata(sqluri, create_tables=True)
    for idx in range(0, user_range):
        email = "%s@%s" % (idx, host)
        node = random.choice(nodes)
        md._safe_execute(_CREATE_USER_RECORD, email=email, node=node, **params)
Example #2
0
    def setUp(self):
        super(TestSQLDB, self).setUp()

        self.backend = SQLMetadata(_SQLURI, create_tables=True)

        # adding a node with 100 slots
        self.backend._safe_execute(
            """insert into nodes (`node`, `service`, `available`,
                    `capacity`, `current_load`, `downed`, `backoff`)
                  values ("phx12", "sync", 100, 100, 0, 0, 0)""")

        self._sqlite = self.backend._engine.driver == 'pysqlite'
class TestSQLDB(NodeAssignmentTests, TestCase):

    _SQLURI = os.environ.get('WIMMS_SQLURI', 'sqlite:////tmp/wimms.' + TEMP_ID)

    def setUp(self):
        self.backend = SQLMetadata(self._SQLURI, create_tables=True)
        super(TestSQLDB, self).setUp()

    def tearDown(self):
        super(TestSQLDB, self).tearDown()
        if self.backend._engine.driver == 'pysqlite':
            filename = self.backend.sqluri.split('sqlite://')[-1]
            if os.path.exists(filename):
                os.remove(filename)
        else:
            self.backend._safe_execute('drop table services;')
            self.backend._safe_execute('drop table nodes;')
            self.backend._safe_execute('drop table users;')
Example #4
0
class TestSQLDB(NodeAssignmentTests, TestCase):

    _SQLURI = os.environ.get('WIMMS_SQLURI', 'sqlite:////tmp/wimms.' + TEMP_ID)

    def setUp(self):
        self.backend = SQLMetadata(self._SQLURI, create_tables=True)
        super(TestSQLDB, self).setUp()

    def tearDown(self):
        super(TestSQLDB, self).tearDown()
        if self.backend._engine.driver == 'pysqlite':
            filename = self.backend.sqluri.split('sqlite://')[-1]
            if os.path.exists(filename):
                os.remove(filename)
        else:
            self.backend._safe_execute('drop table services;')
            self.backend._safe_execute('drop table nodes;')
            self.backend._safe_execute('drop table users;')
Example #5
0
    def setUp(self):
        super(TestSQLDB, self).setUp()

        self.backend = SQLMetadata(_SQLURI, create_tables=True)

        # adding a node with 100 slots
        self.backend._safe_execute(
            """insert into nodes (`node`, `service`, `available`,
                    `capacity`, `current_load`, `downed`, `backoff`)
                  values ("phx12", "sync", 100, 100, 0, 0, 0)"""
        )

        self._sqlite = self.backend._engine.driver == "pysqlite"
Example #6
0
class TestSQLDB(TestCase):
    def setUp(self):
        super(TestSQLDB, self).setUp()

        self.backend = SQLMetadata(_SQLURI, create_tables=True)

        # adding a node with 100 slots
        self.backend._safe_execute(
            """insert into nodes (`node`, `service`, `available`,
                    `capacity`, `current_load`, `downed`, `backoff`)
                  values ("phx12", "sync", 100, 100, 0, 0, 0)""")

        self._sqlite = self.backend._engine.driver == 'pysqlite'

    def tearDown(self):
        if self._sqlite:
            filename = self.backend.sqluri.split('sqlite://')[-1]
            if os.path.exists(filename):
                os.remove(filename)
        else:
            self.backend._safe_execute('delete from nodes')
            self.backend._safe_execute('delete from user_nodes')

    def test_get_node(self):

        unassigned = None, None
        self.assertEquals(unassigned,
                          self.backend.get_node("*****@*****.**", "sync"))

        res = self.backend.allocate_node("*****@*****.**", "sync")

        if self._sqlite:
            wanted = (1, u'phx12')
        else:
            wanted = (0, u'phx12')

        self.assertEqual(res, wanted)
        self.assertEqual(wanted,
                         self.backend.get_node("*****@*****.**", "sync"))
Example #7
0
class TestSQLDB(TestCase):
    def setUp(self):
        super(TestSQLDB, self).setUp()

        self.backend = SQLMetadata(_SQLURI, create_tables=True)

        # adding a node with 100 slots
        self.backend._safe_execute(
            """insert into nodes (`node`, `service`, `available`,
                    `capacity`, `current_load`, `downed`, `backoff`)
                  values ("phx12", "sync", 100, 100, 0, 0, 0)"""
        )

        self._sqlite = self.backend._engine.driver == "pysqlite"

    def tearDown(self):
        if self._sqlite:
            filename = self.backend.sqluri.split("sqlite://")[-1]
            if os.path.exists(filename):
                os.remove(filename)
        else:
            self.backend._safe_execute("delete from nodes")
            self.backend._safe_execute("delete from user_nodes")

    def test_get_node(self):

        unassigned = None, None
        self.assertEquals(unassigned, self.backend.get_node("*****@*****.**", "sync"))

        res = self.backend.allocate_node("*****@*****.**", "sync")

        if self._sqlite:
            wanted = (1, u"phx12")
        else:
            wanted = (0, u"phx12")

        self.assertEqual(res, wanted)
        self.assertEqual(wanted, self.backend.get_node("*****@*****.**", "sync"))
 def setUp(self):
     self.backend = SQLMetadata(self._SQLURI, create_tables=True)
     super(TestSQLDB, self).setUp()
Example #9
0
 def setUp(self):
     self.backend = SQLMetadata(self._SQLURI, create_tables=True)
     super(TestSQLDB, self).setUp()