Exemplo n.º 1
0
  def testGetStatisticsNoData(self, ec2InstanceMetricGetterMock,
                                 repositoryMock):
    metricID = "abc"
    class MetricRowSpec(object):
      uid = None
      datasource = None

    metricRowMock = Mock(
        spec_set=MetricRowSpec,
        uid=metricID,
        datasource="autostack")
    autostackMock = Mock()
    repositoryMock.getAutostackFromMetric = Mock(return_value=autostackMock)
    repositoryMock.getMetricStats.side_effect = MetricStatisticsNotReadyError()
    metricGetterMock = Mock()

    ec2InstanceMetricGetterMock.return_value = metricGetterMock
    metricGetterMock.collectMetricStatistics.return_value = []

    # Call the function under test
    with self.assertRaises(MetricStatisticsNotReadyError):
      aggregation.getStatistics(metricRowMock)

    self.assertEqual(repositoryMock.getAutostackFromMetric.call_args[0][1],
                     metricID)

    metricGetterMock.collectMetricStatistics.assert_called_once_with(
        autostackMock, metricRowMock)
    metricGetterMock.close.assert_called_once()
Exemplo n.º 2
0
  def testGetStatisticsMultpleInstances(self, ec2InstanceMetricGetterMock,
                                        getAutostackFromMetricMock,
                                        _engineFactoryMock):

    metricID = "abc"
    class MetricRowSpec(object):
      uid = None
      datasource = None
    metricRowMock = Mock(
        spec_set=MetricRowSpec,
        uid=metricID,
        datasource="autostack")
    autostackMock = Mock()
    getAutostackFromMetricMock.return_value = autostackMock

    metricGetterMock = Mock()
    ec2InstanceMetricGetterMock.return_value = metricGetterMock
    metricGetterMock.collectMetricStatistics.return_value = [
        InstanceMetricData(
            instanceID="tempID1",
            records=[MetricRecord(timestamp=None,
                                  value={"min": 5.0, "max": 20.0})]),
        InstanceMetricData(
            instanceID="tempID2",
            records=[MetricRecord(timestamp=None,
                                  value={"min": 15.0, "max": 30.0})]),
    ]

    # Call the function under test
    stats = aggregation.getStatistics(metricRowMock)

    # Validate stats
    self.assertSetEqual(set(stats.keys()), set(("min", "max")))
    # Make sure to include 20% buffer on range
    self.assertAlmostEqual(stats["min"], 7.0)
    self.assertAlmostEqual(stats["max"], 28.0)

    # Validate mocks were called correctly
    self.assertEqual(getAutostackFromMetricMock.call_args[0][1], metricID)

    metricGetterMock.collectMetricStatistics.assert_called_once_with(
        autostackMock, metricRowMock)
    metricGetterMock.close.assert_called_once()