Example #1
0
 def test_invalid_user_count(self):
     self.scenario_dict['user_count'] = -1
     self.write_scenario_file()
     with assert_raises(ValueError):
         Scenario(self.stub_scenario_file)
     with assert_raises(ValueError):
         Scenario(self.stub_scenario_file, user_count=0)
Example #2
0
    def test_packb_unpackb_with_run_seconds(self):
        self.scenario_dict['run_seconds'] = 27
        self.write_scenario_file()
        scenario = Scenario(self.stub_scenario_file, version='0.1.1')
        assert_equal(27, scenario.run_seconds)
        assert_equal(None, scenario.operation_count)
        packed = scenario.packb()
        assert_is_instance(packed, bytes)
        unpacked = Scenario.unpackb(packed)
        assert_is_instance(unpacked, Scenario)
        for attr in [
                'name', '_scenario_data', 'user_count', 'operation_count',
                'run_seconds', 'container_base', 'container_count',
                'containers', 'container_concurrency', 'sizes_by_name',
                'version', 'bench_size_thresholds'
        ]:
            assert_equal(getattr(unpacked, attr), getattr(scenario, attr))

        scenario = Scenario(self.stub_scenario_file,
                            run_seconds=88,
                            operation_count=99)
        assert_equal(88, scenario.run_seconds)
        assert_equal(None, scenario.operation_count)
        packed = scenario.packb()
        assert_is_instance(packed, bytes)
        unpacked = Scenario.unpackb(packed)
        assert_is_instance(unpacked, Scenario)
        for attr in [
                'name', '_scenario_data', 'user_count', 'operation_count',
                'run_seconds', 'container_base', 'container_count',
                'containers', 'container_concurrency', 'sizes_by_name',
                'version', 'bench_size_thresholds'
        ]:
            assert_equal(getattr(unpacked, attr), getattr(scenario, attr))
Example #3
0
 def test_containers_custom_policy(self):
     self.scenario_dict['policy'] = 'candlestick'
     self.write_scenario_file()
     scenario = Scenario(self.stub_scenario_file)
     assert_list_equal(
         scenario.containers,
         ['ssbench_%06d_candlestick' % i for i in xrange(100)])
    def test_start_run(self):
        # Just instantiating the object shouldn't create anything
        assert_false(os.path.exists(self.result_file_path))

        self.run_results.start_run(self.scenario)

        # start_run opens the file for writing and dumps out the scenario.
        assert_equal(len(self.scenario.packb()), self._current_size())

        # This is a bit white-box, but that's what we're here for...
        assert_greater(self._current_size(), 0)

        with open(self.result_file_path, "rb") as f:
            unpacker = msgpack.Unpacker(file_like=f)
            got_scenario = Scenario.unpackb(unpacker)
            for attr in [
                "name",
                "_scenario_data",
                "user_count",
                "operation_count",
                "run_seconds",
                "container_base",
                "container_count",
                "containers",
                "container_concurrency",
                "sizes_by_name",
                "version",
                "bench_size_thresholds",
            ]:
                assert_equal(getattr(got_scenario, attr), getattr(self.scenario, attr))
Example #5
0
 def test_unpackb_backwards_compat(self):
     # Older ssbench didn't have a delete_after key in scenario data; make
     # sure we can still load those for reporting
     packed = msgpack.packb({
         '_scenario_data':
         self.scenario._scenario_data,
         'name':
         self.scenario.name,
         'version':
         self.scenario.version,
         'user_count':
         self.scenario.user_count,
         'operation_count':
         self.scenario.operation_count,
         'run_seconds':
         self.scenario.run_seconds,
         'container_base':
         self.scenario.container_base,
         'container_count':
         self.scenario.container_count,
         'container_concurrency':
         self.scenario.container_concurrency,
     })
     assert_is_instance(packed, bytes)
     unpacked = Scenario.unpackb(packed)
     assert_is_instance(unpacked, Scenario)
     for attr in [
             'name', '_scenario_data', 'user_count', 'operation_count',
             'run_seconds', 'container_base', 'container_count',
             'containers', 'container_concurrency', 'sizes_by_name',
             'version', 'bench_size_thresholds'
     ]:
         assert_equal(getattr(unpacked, attr), getattr(self.scenario, attr))
Example #6
0
 def test_constructor_overrides(self):
     scenario = Scenario(self.stub_scenario_file,
                         container_count=21,
                         user_count=37,
                         operation_count=101)
     assert_equal(21, len(scenario.containers))
     assert_equal(37, scenario.user_count)
     assert_equal(101, scenario.operation_count)
Example #7
0
    def read_results(self):
        if self.results_file_path.endswith('.gz'):
            file_like = GzipFile(self.results_file_path, 'rb')
        else:
            file_like = open(self.results_file_path, 'rb')
        unpacker = msgpack.Unpacker(file_like=file_like)
        scenario = Scenario.unpackb(unpacker)

        return scenario, unpacker
Example #8
0
 def test_containers_custom(self):
     self.scenario_dict['container_base'] = 'iggy'
     self.scenario_dict['container_count'] = 77
     self.scenario_dict['container_concurrency'] = 13
     self.write_scenario_file()
     scenario = Scenario(self.stub_scenario_file)
     assert_list_equal(scenario.containers,
                       ['iggy_%06d_default_policy' % i for i in xrange(77)])
     assert_equal(13, scenario.container_concurrency)
Example #9
0
    def read_results(self):
        if self.results_file_path.endswith('.gz'):
            file_like = GzipFile(self.results_file_path, 'rb')
        else:
            file_like = open(self.results_file_path, 'rb')
        unpacker = msgpack.Unpacker(file_like=file_like)
        scenario = Scenario.unpackb(unpacker)

        return scenario, unpacker
Example #10
0
 def test_packb_unpackb(self):
     packed = self.scenario.packb()
     assert_is_instance(packed, bytes)
     unpacked = Scenario.unpackb(packed)
     assert_is_instance(unpacked, Scenario)
     for attr in ['name', '_scenario_data', 'user_count', 'operation_count',
                  'run_seconds', 'container_base', 'container_count',
                  'containers', 'container_concurrency', 'sizes_by_name',
                  'version', 'bench_size_thresholds']:
         assert_equal(getattr(unpacked, attr), getattr(self.scenario, attr))
Example #11
0
    def test_bench_jobs_with_run_seconds(self):
        initial_handler = lambda s, f: 17
        signal.signal(signal.SIGALRM, initial_handler)

        self.scenario_dict['operation_count'] = 1
        self.scenario_dict['run_seconds'] = 1
        self.write_scenario_file()
        scenario = Scenario(self.stub_scenario_file)

        start_time = time.time()
        jobs = list(scenario.bench_jobs())
        delta_t = time.time() - start_time

        # Count should be greater than 1, for sure...
        assert_greater(len(jobs), 1)
        # +/- 10ms seems good:
        assert_almost_equal(delta_t, scenario.run_seconds, delta=0.01)

        restored_handler = signal.signal(signal.SIGALRM, signal.SIG_DFL)
        assert_equal(restored_handler, initial_handler)
Example #12
0
    def test_bench_jobs_with_run_seconds(self):
        initial_handler = lambda s, f: 17
        signal.signal(signal.SIGALRM, initial_handler)

        self.scenario_dict['operation_count'] = 1
        self.scenario_dict['run_seconds'] = 1
        self.write_scenario_file()
        scenario = Scenario(self.stub_scenario_file)

        start_time = time.time()
        jobs = list(scenario.bench_jobs())
        delta_t = time.time() - start_time

        # Count should be greater than 1, for sure...
        assert_greater(len(jobs), 1)
        # +/- 10ms seems good:
        assert_almost_equal(delta_t, scenario.run_seconds, delta=0.01)

        restored_handler = signal.signal(signal.SIGALRM, signal.SIG_DFL)
        assert_equal(restored_handler, initial_handler)
Example #13
0
 def test_unpackb_given_unpacker(self):
     packed = self.scenario.packb()
     assert_is_instance(packed, bytes)
     file_like = StringIO(packed + msgpack.packb({'red': 'herring'}))
     unpacker = msgpack.Unpacker(file_like=file_like)
     unpacked = Scenario.unpackb(unpacker)
     assert_is_instance(unpacked, Scenario)
     for attr in ['name', '_scenario_data', 'user_count', 'operation_count',
                  'run_seconds', 'container_base', 'container_count',
                  'containers', 'container_concurrency', 'sizes_by_name',
                  'version', 'bench_size_thresholds']:
         assert_equal(getattr(unpacked, attr), getattr(self.scenario, attr))
Example #14
0
 def test_packb_unpackb(self):
     packed = self.scenario.packb()
     assert_is_instance(packed, bytes)
     unpacked = Scenario.unpackb(packed)
     assert_is_instance(unpacked, Scenario)
     for attr in [
             'name', '_scenario_data', 'user_count', 'operation_count',
             'run_seconds', 'container_base', 'container_count',
             'containers', 'container_concurrency', 'sizes_by_name',
             'version', 'bench_size_thresholds', 'delete_after'
     ]:
         assert_equal(getattr(unpacked, attr), getattr(self.scenario, attr))
Example #15
0
    def test_packb_unpackb_with_run_seconds(self):
        self.scenario_dict['run_seconds'] = 27
        self.write_scenario_file()
        scenario = Scenario(self.stub_scenario_file, version='0.1.1')
        assert_equal(27, scenario.run_seconds)
        assert_equal(None, scenario.operation_count)
        packed = scenario.packb()
        assert_is_instance(packed, bytes)
        unpacked = Scenario.unpackb(packed)
        assert_is_instance(unpacked, Scenario)
        for attr in ['name', '_scenario_data', 'user_count', 'operation_count',
                     'run_seconds', 'container_base', 'container_count',
                     'containers', 'container_concurrency', 'sizes_by_name',
                     'version', 'bench_size_thresholds']:
            assert_equal(getattr(unpacked, attr), getattr(scenario, attr))

        scenario = Scenario(self.stub_scenario_file, run_seconds=88,
                            operation_count=99)
        assert_equal(88, scenario.run_seconds)
        assert_equal(None, scenario.operation_count)
        packed = scenario.packb()
        assert_is_instance(packed, bytes)
        unpacked = Scenario.unpackb(packed)
        assert_is_instance(unpacked, Scenario)
        for attr in ['name', '_scenario_data', 'user_count', 'operation_count',
                     'run_seconds', 'container_base', 'container_count',
                     'containers', 'container_concurrency', 'sizes_by_name',
                     'version', 'bench_size_thresholds']:
            assert_equal(getattr(unpacked, attr), getattr(scenario, attr))
Example #16
0
 def test_unpackb_given_unpacker(self):
     packed = self.scenario.packb()
     assert_is_instance(packed, bytes)
     file_like = StringIO(packed + msgpack.packb({'red': 'herring'}))
     unpacker = msgpack.Unpacker(file_like=file_like)
     unpacked = Scenario.unpackb(unpacker)
     assert_is_instance(unpacked, Scenario)
     for attr in [
             'name', '_scenario_data', 'user_count', 'operation_count',
             'run_seconds', 'container_base', 'container_count',
             'containers', 'container_concurrency', 'sizes_by_name',
             'version', 'bench_size_thresholds'
     ]:
         assert_equal(getattr(unpacked, attr), getattr(self.scenario, attr))
Example #17
0
 def test_unpackb_backwards_compat(self):
     # Older ssbench didn't have a delete_after key in scenario data; make
     # sure we can still load those for reporting
     packed = msgpack.packb({
         '_scenario_data': self.scenario._scenario_data,
         'name': self.scenario.name,
         'version': self.scenario.version,
         'user_count': self.scenario.user_count,
         'operation_count': self.scenario.operation_count,
         'run_seconds': self.scenario.run_seconds,
         'container_base': self.scenario.container_base,
         'container_count': self.scenario.container_count,
         'container_concurrency': self.scenario.container_concurrency,
     })
     assert_is_instance(packed, bytes)
     unpacked = Scenario.unpackb(packed)
     assert_is_instance(unpacked, Scenario)
     for attr in ['name', '_scenario_data', 'user_count', 'operation_count',
                  'run_seconds', 'container_base', 'container_count',
                  'containers', 'container_concurrency', 'sizes_by_name',
                  'version', 'bench_size_thresholds']:
         assert_equal(getattr(unpacked, attr), getattr(self.scenario, attr))
Example #18
0
    def test_start_run(self):
        # Just instantiating the object shouldn't create anything
        assert_false(os.path.exists(self.result_file_path))

        self.run_results.start_run(self.scenario)

        # start_run opens the file for writing and dumps out the scenario.
        assert_equal(len(self.scenario.packb()), self._current_size())

        # This is a bit white-box, but that's what we're here for...
        assert_greater(self._current_size(), 0)

        with open(self.result_file_path, 'rb') as f:
            unpacker = msgpack.Unpacker(file_like=f)
            got_scenario = Scenario.unpackb(unpacker)
            for attr in [
                    'name', '_scenario_data', 'user_count', 'operation_count',
                    'run_seconds', 'container_base', 'container_count',
                    'containers', 'container_concurrency', 'sizes_by_name',
                    'version', 'bench_size_thresholds'
            ]:
                assert_equal(getattr(got_scenario, attr),
                             getattr(self.scenario, attr))
Example #19
0
    def setUp(self):
        superclass = super(ScenarioFixture, self)
        if hasattr(superclass, 'setUp'):
            superclass.setUp()

        if not hasattr(self, 'stub_scenario_file'):
            self.tmp_file = tempfile.NamedTemporaryFile()
            self.stub_scenario_file = self.tmp_file.name

        if not getattr(self, 'scenario_dict', None):
            self.scenario_dict = dict(
                name='Test1 - Happy go lucky',
                sizes=[
                    dict(name='tiny', size_min=99, size_max=100),
                    dict(name='small',
                         size_min=199,
                         size_max=200,
                         crud_profile=[73, 12, 5, 10]),
                    dict(name='medium', size_min=299, size_max=300),
                    dict(name='red herring', size_min=9999, size_max=9999),
                    dict(name='large',
                         size_min=399,
                         size_max=400,
                         crud_profile=[13, 17, 19, 51])
                ],
                initial_files=dict(tiny=700, small=400, medium=200, large=100),
                # From first POC input, all file size percentages can be
                # derived directly from the distribution of initial files.  So
                # we take that shortcut in the definition of scenarios.
                operation_count=20000,
                #             C  R  U  D
                crud_profile=[10, 7, 4, 1],  # maybe make this a dict?
                user_count=1,
            )
        self.write_scenario_file()
        self.scenario = Scenario(self.stub_scenario_file)
        self.scenario_noop = ScenarioNoop(self.stub_scenario_file)
Example #20
0
 def test_open_fails(self):
     with assert_raises(IOError):
         # It also logs, but I'm too lazy to test that
         Scenario('some file which will not be present!')
Example #21
0
 def test_no_op_count_or_run_seconds(self):
     with assert_raises(ValueError):
         self.scenario_dict.pop('run_seconds', None)
         self.scenario_dict.pop('operation_count', None)
         self.write_scenario_file()
         Scenario(self.stub_scenario_file)
Example #22
0
 def test_no_filename_or__scenario_data(self):
     with assert_raises(ValueError):
         self.write_scenario_file()
         Scenario()
Example #23
0
 def test_basic_instantiation_with_block_size(self):
     # very whitebox:
     scenario = Scenario(self.stub_scenario_file, block_size=987)
     assert_dict_equal(self.scenario_dict, scenario._scenario_data)
     assert_equal(ssbench.version, scenario.version)
     assert_equal(987, scenario.block_size)