Coverage for tests/test_metricset.py : 22%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
# This file is part of verify. # # Developed for the LSST Data Management System. # This product includes software developed by the LSST Project # (https://www.lsst.org). # See the COPYRIGHT file at the top-level directory of this distribution # for details of code ownership. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <https://www.gnu.org/licenses/>.
"""Test creating a MetricSet from a mock verification framework metric package located at data/ relative test modules.
These tests are coupled to the data/metrics/*.yaml files. """
self.metrics_yaml_dirname = os.path.join( os.path.dirname(__file__), 'data')
self.metric_set = MetricSet.load_metrics_package( self.metrics_yaml_dirname)
self.assertEqual(len(self.metric_set), 4)
for key in ['testing.PA1', 'testing.PF1', 'testing.PA2', 'testing.AM1']: self.assertIn(key, self.metric_set, msg=key)
"""Test __iter__ over keys (Name instances of metrics).""" keys = [k for k in self.metric_set] self.assertEqual(len(keys), 4) for k in keys: self.assertIsInstance(k, Name)
"""Test the items iterator.""" count = 0 for key, value in self.metric_set.items(): count += 1 self.assertIsInstance(key, Name) self.assertIsInstance(value, Metric) self.assertEqual(count, 4)
"""Both single string and tag lists are present in YAML.""" # Parsing this metric required putting the single tag inside a list self.assertEqual( len(self.metric_set['testing.PA1'].tags), 1) self.assertIn( 'photometric', self.metric_set['testing.PA1'].tags)
self.assertEqual( len(self.metric_set['testing.AM1'].tags), 2) self.assertIn( 'astrometric', self.metric_set['testing.AM1'].tags) self.assertIn( 'random-tag', self.metric_set['testing.AM1'].tags)
"""Test adding and deleting metrics.""" m1 = Metric('validate_drp.test', 'test', '', reference_url='example.com', reference_doc='Doc', reference_page=1) metric_set = MetricSet() self.assertEqual(len(metric_set), 0)
metric_set['validate_drp.test'] = m1 self.assertEqual(len(metric_set), 1) self.assertEqual(metric_set['validate_drp.test'], m1)
with self.assertRaises(KeyError): # inconsistent metric names metric_set['validate_drp.new_test'] = m1
with self.assertRaises(TypeError): # Not a metric name n = Name('validate_drp') m2 = Metric(n, 'test', '') metric_set[n] = m2
del metric_set['validate_drp.test'] self.assertEqual(len(metric_set), 0)
"""Test MetricSet.insert.""" m1 = Metric('validate_drp.test', 'test', '', reference_url='example.com', reference_doc='Doc', reference_page=1) metric_set = MetricSet()
metric_set.insert(m1) self.assertEqual(m1, metric_set['validate_drp.test'])
"""Test MetricSet.update.""" m1 = Metric('validate_drp.test', 'test', '', reference_url='example.com', reference_doc='Doc', reference_page=1) new_metric_set = MetricSet([m1])
self.metric_set.update(new_metric_set)
self.assertIn('validate_drp.test', self.metric_set) self.assertIn('testing.PA1', self.metric_set) self.assertIn('testing.PF1', self.metric_set) self.assertIn('testing.PA2', self.metric_set) self.assertIn('testing.AM1', self.metric_set)
"""Test __iadd__ to merging metric sets.""" m1 = Metric('validate_drp.test', 'test', '', reference_url='example.com', reference_doc='Doc', reference_page=1) new_metric_set = MetricSet([m1])
self.metric_set += new_metric_set
self.assertIn('validate_drp.test', self.metric_set) self.assertIn('testing.PA1', self.metric_set) self.assertIn('testing.PF1', self.metric_set) self.assertIn('testing.PA2', self.metric_set) self.assertIn('testing.AM1', self.metric_set)
"""Test parsing metrics from verify_metrics (an EUPS package)."""
self.metric_set = MetricSet.load_metrics_package('verify_metrics')
"""Just verify that we got metrics without raising an exception""" self.assertTrue(len(self.metric_set) > 0)
"""Test handling of non-existing metrics packages/directories.""" with self.assertRaises(OSError): MetricSet.load_metrics_package('nonexistent_metrics')
"""Test case for MetricSet.subset."""
self.m1 = Metric('pkgA.m1', 'In pkgA', '', tags='testing') self.m2 = Metric('pkgA.m2', 'In pkgA', '', tags='other') self.m3 = Metric('pkgB.m3', 'In pkgB', '', tags='testing') self.metric_set = MetricSet([self.m1, self.m2, self.m3])
subset = self.metric_set.subset('pkgA') self.assertEqual(len(subset), 2) self.assertIn(self.m1.name, subset) self.assertIn(self.m2.name, subset) self.assertNotIn(self.m3.name, subset)
subset = self.metric_set.subset('pkgB') self.assertEqual(len(subset), 1) self.assertNotIn(self.m1.name, subset) self.assertNotIn(self.m2.name, subset) self.assertIn(self.m3.name, subset)
subset = self.metric_set.subset(tags=['testing']) self.assertEqual(len(subset), 2) self.assertIn(self.m1.name, subset) self.assertNotIn(self.m2.name, subset) self.assertIn(self.m3.name, subset)
subset = self.metric_set.subset(package='pkgA', tags=['testing']) self.assertEqual(len(subset), 1) self.assertIn(self.m1.name, subset) self.assertNotIn(self.m2.name, subset) self.assertNotIn(self.m3.name, subset)
"""Test JSON serialization and deserialization for MetricSets."""
self.m1 = Metric('pkgA.m1', 'In pkgA', '', tags=['testing']) self.m2 = Metric('pkgA.m2', 'In pkgA', '', tags=['other']) self.m3 = Metric('pkgB.m3', 'In pkgB', '', tags=['testing']) self.metric_set = MetricSet([self.m1, self.m2, self.m3])
json_doc = self.metric_set.json new_metric_set = MetricSet.deserialize(json_doc) self.assertEqual(self.metric_set, new_metric_set) |