Пример #1
0
 def test_loadAccountsFromFile(self):
     """
     L{LoadSimulator.fromCommandLine} takes an account loader from the
     config file and uses it to create user records for use in the
     simulation.
     """
     accounts = FilePath(self.mktemp())
     accounts.setContent("foo,bar,baz,quux\nfoo2,bar2,baz2,quux2\n")
     config = VALID_CONFIG.copy()
     config["accounts"] = {
         "loader": "contrib.performance.loadtest.sim.recordsFromCSVFile",
         "params": {
             "path": accounts.path
         },
     }
     configpath = FilePath(self.mktemp())
     configpath.setContent(writePlistToString(config))
     io = StringIO()
     sim = LoadSimulator.fromCommandLine(['--config', configpath.path], io)
     self.assertEquals(io.getvalue(), "Loaded 2 accounts.\n")
     self.assertEqual(2, len(sim.records))
     self.assertEqual(sim.records[0].uid, 'foo')
     self.assertEqual(sim.records[0].password, 'bar')
     self.assertEqual(sim.records[0].commonName, 'baz')
     self.assertEqual(sim.records[0].email, 'quux')
     self.assertEqual(sim.records[1].uid, 'foo2')
     self.assertEqual(sim.records[1].password, 'bar2')
     self.assertEqual(sim.records[1].commonName, 'baz2')
     self.assertEqual(sim.records[1].email, 'quux2')
Пример #2
0
 def test_generateRecordsNonDefaultPatterns(self):
     """
     L{LoadSimulator.fromCommandLine} takes an account loader from the
     config file and uses it to generate user records for use in the
     simulation.
     """
     config = VALID_CONFIG.copy()
     config["accounts"] = {
         "loader": "contrib.performance.loadtest.sim.generateRecords",
         "params": {
             "count": 3,
             "uidPattern": "USER%03d",
             "passwordPattern": "PASSWORD%03d",
             "namePattern": "Test User %03d",
             "emailPattern": "*****@*****.**",
         },
     }
     configpath = FilePath(self.mktemp())
     configpath.setContent(writePlistToString(config))
     sim = LoadSimulator.fromCommandLine(['--config', configpath.path],
                                         StringIO())
     self.assertEqual(3, len(sim.records))
     self.assertEqual(sim.records[0].uid, 'USER001')
     self.assertEqual(sim.records[0].password, 'PASSWORD001')
     self.assertEqual(sim.records[0].commonName, 'Test User 001')
     self.assertEqual(sim.records[0].email, '*****@*****.**')
     self.assertEqual(sim.records[2].uid, 'USER003')
     self.assertEqual(sim.records[2].password, 'PASSWORD003')
     self.assertEqual(sim.records[2].commonName, 'Test User 003')
     self.assertEqual(sim.records[2].email, '*****@*****.**')
Пример #3
0
 def test_loadAccountsFromFile(self):
     """
     L{LoadSimulator.fromCommandLine} takes an account loader from the
     config file and uses it to create user records for use in the
     simulation.
     """
     accounts = FilePath(self.mktemp())
     accounts.setContent(
         "foo,bar,baz,quux,goo\nfoo2,bar2,baz2,quux2,goo2\n")
     config = VALID_CONFIG.copy()
     config["accounts"] = {
         "loader": "contrib.performance.loadtest.sim.recordsFromCSVFile",
         "params": {
             "path": accounts.path,
             "interleavePods": True,
         },
     }
     configpath = FilePath(self.mktemp())
     configpath.setContent(writePlistToString(config))
     io = StringIO()
     sim = LoadSimulator.fromCommandLine(['--config', configpath.path], io)
     self.assertEquals(io.getvalue(), "Loaded 2 accounts.\n")
     self.assertEqual(2, len(sim.records))
     self.assertEqual(sim.records[0].uid, 'foo')
     self.assertEqual(sim.records[0].password, 'bar')
     self.assertEqual(sim.records[0].commonName, 'baz')
     self.assertEqual(sim.records[0].email, 'quux')
     self.assertEqual(sim.records[1].uid, 'foo2')
     self.assertEqual(sim.records[1].password, 'bar2')
     self.assertEqual(sim.records[1].commonName, 'baz2')
     self.assertEqual(sim.records[1].email, 'quux2')
Пример #4
0
    def test_loadPopulationParameters(self):
        """
        Client weights and profiles are loaded from the [clients]
        section of the configuration file specified.
        """
        config = FilePath(self.mktemp())
        config.setContent(writePlistToString({
                    "clients": [{
                            "software": "contrib.performance.loadtest.ical.OS_X_10_6",
                            "params": {"foo": "bar"},
                            "profiles": [{
                                    "params": {
                                        "interval": 25,
                                        "eventStartDistribution": {
                                            "type": "contrib.performance.stats.NormalDistribution",
                                            "params": {
                                                "mu": 123,
                                                "sigma": 456,
                                                }}},
                                    "class": "contrib.performance.loadtest.profiles.Eventer"}],
                            "weight": 3,
                            }]}))

        sim = LoadSimulator.fromCommandLine(
            ['--config', config.path, '--clients', config.path]
        )
        expectedParameters = PopulationParameters()
        expectedParameters.addClient(
            3, ClientType(OS_X_10_6, {"foo": "bar"}, [ProfileType(Eventer, {
                            "interval": 25,
                            "eventStartDistribution": NormalDistribution(123, 456)})]))
        self.assertEquals(sim.parameters, expectedParameters)
Пример #5
0
 def test_loadDefaultAccountsFromFile(self):
     """
     L{LoadSimulator.fromCommandLine} takes an account loader (with
     empty path)from the config file and uses it to create user
     records for use in the simulation.
     """
     config = VALID_CONFIG.copy()
     config["accounts"] = {
         "loader": "contrib.performance.loadtest.sim.recordsFromCSVFile",
         "params": {
             "path": "",
             "interleavePods": True,
         },
     }
     configpath = FilePath(self.mktemp())
     configpath.setContent(writePlistToString(config))
     sim = LoadSimulator.fromCommandLine(['--config', configpath.path],
                                         StringIO())
     self.assertEqual(99, len(sim.records))
     self.assertEqual(sim.records[0].uid, 'user01')
     self.assertEqual(sim.records[0].password, 'user01')
     self.assertEqual(sim.records[0].commonName, 'User 01')
     self.assertEqual(sim.records[0].email, '*****@*****.**')
     self.assertEqual(sim.records[98].uid, 'user99')
     self.assertEqual(sim.records[98].password, 'user99')
     self.assertEqual(sim.records[98].commonName, 'User 99')
     self.assertEqual(sim.records[98].email, '*****@*****.**')
Пример #6
0
 def test_generateRecordsDefaultPatterns(self):
     """
     L{LoadSimulator.fromCommandLine} takes an account loader from the
     config file and uses it to generate user records for use in the
     simulation.
     """
     config = VALID_CONFIG.copy()
     config["accounts"] = {
         "loader": "contrib.performance.loadtest.sim.generateRecords",
         "params": {
             "count": 2
         },
     }
     configpath = FilePath(self.mktemp())
     configpath.setContent(writePlistToString(config))
     sim = LoadSimulator.fromCommandLine(['--config', configpath.path],
                                         StringIO())
     self.assertEqual(2, len(sim.records))
     self.assertEqual(sim.records[0].uid, 'user1')
     self.assertEqual(sim.records[0].password, 'user1')
     self.assertEqual(sim.records[0].commonName, 'User 1')
     self.assertEqual(sim.records[0].email, '*****@*****.**')
     self.assertEqual(sim.records[1].uid, 'user2')
     self.assertEqual(sim.records[1].password, 'user2')
     self.assertEqual(sim.records[1].commonName, 'User 2')
     self.assertEqual(sim.records[1].email, '*****@*****.**')
Пример #7
0
 def test_generateRecordsNonDefaultPatterns(self):
     """
     L{LoadSimulator.fromCommandLine} takes an account loader from the
     config file and uses it to generate user records for use in the
     simulation.
     """
     config = VALID_CONFIG.copy()
     config["accounts"] = {
         "loader": "contrib.performance.loadtest.sim.generateRecords",
         "params": {
             "count": 3,
             "uidPattern": "USER%03d",
             "passwordPattern": "PASSWORD%03d",
             "namePattern": "Test User %03d",
             "emailPattern": "*****@*****.**",
         },
     }
     configpath = FilePath(self.mktemp())
     configpath.setContent(writePlistToString(config))
     sim = LoadSimulator.fromCommandLine(['--config', configpath.path],
                                         StringIO())
     self.assertEqual(3, len(sim.records))
     self.assertEqual(sim.records[0].uid, 'USER001')
     self.assertEqual(sim.records[0].password, 'PASSWORD001')
     self.assertEqual(sim.records[0].commonName, 'Test User 001')
     self.assertEqual(sim.records[0].email, '*****@*****.**')
     self.assertEqual(sim.records[2].uid, 'USER003')
     self.assertEqual(sim.records[2].password, 'PASSWORD003')
     self.assertEqual(sim.records[2].commonName, 'Test User 003')
     self.assertEqual(sim.records[2].email, '*****@*****.**')
Пример #8
0
 def test_generateRecordsDefaultPatterns(self):
     """
     L{LoadSimulator.fromCommandLine} takes an account loader from the
     config file and uses it to generate user records for use in the
     simulation.
     """
     config = VALID_CONFIG.copy()
     config["accounts"] = {
         "loader": "contrib.performance.loadtest.sim.generateRecords",
         "params": {
             "count": 2
         },
     }
     configpath = FilePath(self.mktemp())
     configpath.setContent(writePlistToString(config))
     sim = LoadSimulator.fromCommandLine(['--config', configpath.path],
                                         StringIO())
     self.assertEqual(2, len(sim.records))
     self.assertEqual(sim.records[0].uid, 'user1')
     self.assertEqual(sim.records[0].password, 'user1')
     self.assertEqual(sim.records[0].commonName, 'User 1')
     self.assertEqual(sim.records[0].email, '*****@*****.**')
     self.assertEqual(sim.records[1].uid, 'user2')
     self.assertEqual(sim.records[1].password, 'user2')
     self.assertEqual(sim.records[1].commonName, 'User 2')
     self.assertEqual(sim.records[1].email, '*****@*****.**')
Пример #9
0
 def test_loadDefaultAccountsFromFile(self):
     """
     L{LoadSimulator.fromCommandLine} takes an account loader (with
     empty path)from the config file and uses it to create user
     records for use in the simulation.
     """
     config = VALID_CONFIG.copy()
     config["accounts"] = {
         "loader": "contrib.performance.loadtest.sim.recordsFromCSVFile",
         "params": {
             "path": ""
         },
     }
     configpath = FilePath(self.mktemp())
     configpath.setContent(writePlistToString(config))
     sim = LoadSimulator.fromCommandLine(['--config', configpath.path],
                                         StringIO())
     self.assertEqual(99, len(sim.records))
     self.assertEqual(sim.records[0].uid, 'user01')
     self.assertEqual(sim.records[0].password, 'user01')
     self.assertEqual(sim.records[0].commonName, 'User 01')
     self.assertEqual(sim.records[0].email, '*****@*****.**')
     self.assertEqual(sim.records[98].uid, 'user99')
     self.assertEqual(sim.records[98].password, 'user99')
     self.assertEqual(sim.records[98].commonName, 'User 99')
     self.assertEqual(sim.records[98].email, '*****@*****.**')
Пример #10
0
    def test_loadPopulationParameters(self):
        """
        Client weights and profiles are loaded from the [clients]
        section of the configuration file specified.
        """
        config = FilePath(self.mktemp())
        config.setContent(
            writePlistToString(
                {
                    "clients": [
                        {
                            "software": "contrib.performance.loadtest.ical.OS_X_10_6",
                            "params": {
                                "foo": "bar"
                            },
                            "profiles": [
                                {
                                    "params": {
                                        "interval": 25,
                                        "eventStartDistribution": {
                                            "type": "contrib.performance.stats.NormalDistribution",
                                            "params": {
                                                "mu": 123,
                                                "sigma": 456,
                                            }
                                        }
                                    },
                                    "class": "contrib.performance.loadtest.profiles.Eventer"
                                }
                            ],
                            "weight": 3,
                        }
                    ]
                }
            )
        )

        sim = LoadSimulator.fromCommandLine(
            ['--config', config.path, '--clients', config.path]
        )
        expectedParameters = PopulationParameters()
        expectedParameters.addClient(
            3,
            ClientType(
                OS_X_10_6,
                {"foo": "bar"},
                [
                    ProfileType(
                        Eventer, {
                            "interval": 25,
                            "eventStartDistribution": NormalDistribution(123, 456)
                        }
                    )
                ]
            )
        )
        self.assertEquals(sim.parameters, expectedParameters)
Пример #11
0
 def test_specifyRuntime(self):
     """
     L{LoadSimulator.fromCommandLine} recognizes the I{--runtime} option to
     specify a limit on how long the simulation will run.
     """
     config = FilePath(self.mktemp())
     config.setContent(VALID_CONFIG_PLIST)
     sim = LoadSimulator.fromCommandLine(['--config', config.path, '--runtime', '123'])
     self.assertEqual(123, sim.runtime)
Пример #12
0
 def test_specifyRuntime(self):
     """
     L{LoadSimulator.fromCommandLine} recognizes the I{--runtime} option to
     specify a limit on how long the simulation will run.
     """
     config = FilePath(self.mktemp())
     config.setContent(VALID_CONFIG_PLIST)
     sim = LoadSimulator.fromCommandLine(['--config', config.path, '--runtime', '123'])
     self.assertEqual(123, sim.runtime)
Пример #13
0
 def test_loadServerConfig(self):
     """
     The Calendar Server host and port are loaded from the [server]
     section of the configuration file specified.
     """
     config = FilePath(self.mktemp())
     config.setContent(
         writePlistToString({"server": "https://127.0.0.3:8432/"}))
     sim = LoadSimulator.fromCommandLine(['--config', config.path])
     self.assertEquals(sim.server, "https://127.0.0.3:8432/")
Пример #14
0
 def test_loadServerConfig(self):
     """
     The Calendar Server host and port are loaded from the [server]
     section of the configuration file specified.
     """
     config = FilePath(self.mktemp())
     config.setContent(writePlistToString({
                 "server": "https://127.0.0.3:8432/"}))
     sim = LoadSimulator.fromCommandLine(['--config', config.path])
     self.assertEquals(sim.server, "https://127.0.0.3:8432/")
Пример #15
0
 def test_loadLogObservers(self):
     """
     Log observers specified in the [observers] section of the
     configuration file are added to the logging system.
     """
     config = FilePath(self.mktemp())
     config.setContent(writePlistToString({
         "observers": [{"type":"contrib.performance.loadtest.population.SimpleStatistics", "params":{}, }, ]
     }))
     sim = LoadSimulator.fromCommandLine(['--config', config.path])
     self.assertEquals(len(sim.observers), 1)
     self.assertIsInstance(sim.observers[0], SimpleStatistics)
Пример #16
0
 def test_requireClient(self):
     """
     At least one client is required, so if a configuration with an
     empty clients array is specified, a single default client type
     is used.
     """
     config = FilePath(self.mktemp())
     config.setContent(writePlistToString({"clients": []}))
     sim = LoadSimulator.fromCommandLine(['--config', config.path])
     expectedParameters = PopulationParameters()
     expectedParameters.addClient(
         1, ClientType(OS_X_10_6, {}, [Eventer, Inviter, Accepter]))
     self.assertEquals(sim.parameters, expectedParameters)
Пример #17
0
 def test_requireClient(self):
     """
     At least one client is required, so if a configuration with an
     empty clients array is specified, a single default client type
     is used.
     """
     config = FilePath(self.mktemp())
     config.setContent(writePlistToString({"clients": []}))
     sim = LoadSimulator.fromCommandLine(
         ['--config', config.path, '--clients', config.path])
     expectedParameters = PopulationParameters()
     expectedParameters.addClient(
         1, ClientType(OS_X_10_6, {}, [Eventer, Inviter, Accepter]))
     self.assertEquals(sim.parameters, expectedParameters)
Пример #18
0
 def test_loadLogObservers(self):
     """
     Log observers specified in the [observers] section of the
     configuration file are added to the logging system.
     """
     config = FilePath(self.mktemp())
     config.setContent(
         writePlistToString({
             "observers": [
                 {
                     "type":
                     "contrib.performance.loadtest.population.SimpleStatistics",
                     "params": {},
                 },
             ]
         }))
     sim = LoadSimulator.fromCommandLine(['--config', config.path])
     self.assertEquals(len(sim.observers), 1)
     self.assertIsInstance(sim.observers[0], SimpleStatistics)
Пример #19
0
 def test_loadArrivalConfig(self):
     """
     The arrival policy type and arguments are loaded from the
     [arrival] section of the configuration file specified.
     """
     config = FilePath(self.mktemp())
     config.setContent(writePlistToString({
                 "arrival": {
                     "factory": "contrib.performance.loadtest.population.SmoothRampUp",
                     "params": {
                         "groups": 10,
                         "groupSize": 1,
                         "interval": 3,
                         },
                     },
                 }))
     sim = LoadSimulator.fromCommandLine(['--config', config.path])
     self.assertEquals(
         sim.arrival,
         Arrival(SmoothRampUp, dict(groups=10, groupSize=1, interval=3)))
Пример #20
0
 def test_loadServerConfig(self):
     """
     The Calendar Server host and port are loaded from the [server]
     section of the configuration file specified.
     """
     config = FilePath(self.mktemp())
     config.setContent(
         writePlistToString({
             "servers": {
                 "PodA": {
                     "enabled": True,
                     "uri": 'https://127.0.0.3:8432/',
                     "stats": {
                         "enabled": False
                     },
                 },
             }
         }))
     sim = LoadSimulator.fromCommandLine(['--config', config.path])
     self.assertEquals(sim.servers["PodA"]["uri"],
                       "https://127.0.0.3:8432/")
Пример #21
0
 def test_loadArrivalConfig(self):
     """
     The arrival policy type and arguments are loaded from the
     [arrival] section of the configuration file specified.
     """
     config = FilePath(self.mktemp())
     config.setContent(
         writePlistToString({
             "arrival": {
                 "factory":
                 "contrib.performance.loadtest.population.SmoothRampUp",
                 "params": {
                     "groups": 10,
                     "groupSize": 1,
                     "interval": 3,
                 },
             },
         }))
     sim = LoadSimulator.fromCommandLine(['--config', config.path])
     self.assertEquals(
         sim.arrival,
         Arrival(SmoothRampUp, dict(groups=10, groupSize=1, interval=3)))