def test__write_data_db(self): syncdb(TestProbesDB) probes = self.get_probes_object(use_db=True) probes.probedata = self.get_test_probedata() probes.cgroups = self.get_test_cgroups() for cname in ["foo.example.com", "bar.example.com"]: client = Mock() client.hostname = cname probes._write_data_db(client) pdata = ProbesDataModel.objects.filter(hostname=cname).all() self.assertEqual(len(pdata), len(probes.probedata[cname])) for probe in pdata: self.assertEqual(probe.hostname, client.hostname) self.assertIsNotNone(probe.data) if probe.probe == "xml": xdata = lxml.etree.XML(probe.data) self.assertIsNotNone(xdata) self.assertIsNotNone(xdata.find("test")) self.assertEqual(xdata.find("test").get("foo"), "foo") elif probe.probe == "text": pass elif probe.probe == "multiline": self.assertGreater(len(probe.data.splitlines()), 1) elif probe.probe == "empty": self.assertEqual(probe.data, "") elif probe.probe == "yaml": self.assertItemsEqual(test_data, yaml.load(probe.data)) elif probe.probe == "json": self.assertItemsEqual(test_data, json.loads(probe.data)) else: assert False, "Strange probe found in _write_data_db data" pgroups = ProbesGroupsModel.objects.filter(hostname=cname).all() self.assertEqual(len(pgroups), len(probes.cgroups[cname])) # test that old probe data is removed properly cname = 'foo.example.com' del probes.probedata[cname]['text'] probes.cgroups[cname].pop() client = Mock() client.hostname = cname probes._write_data_db(client) pdata = ProbesDataModel.objects.filter(hostname=cname).all() self.assertEqual(len(pdata), len(probes.probedata[cname])) pgroups = ProbesGroupsModel.objects.filter(hostname=cname).all() self.assertEqual(len(pgroups), len(probes.cgroups[cname]))
def test__load_data_db(self): syncdb(TestProbesDB) probes = self.get_probes_object(use_db=True) probes.probedata = self.get_test_probedata() probes.cgroups = self.get_test_cgroups() for cname in probes.probedata.keys(): client = Mock() client.hostname = cname probes._write_data_db(client) probes.probedata = dict() probes.cgroups = dict() probes._load_data_db() self.assertItemsEqual(probes.probedata, self.get_test_probedata()) # the db backend does not store groups at all if a client has # no groups set, so we can't just use assertItemsEqual here, # because loading saved data may _not_ result in the original # data if some clients had no groups set. test_cgroups = self.get_test_cgroups() for cname, groups in test_cgroups.items(): if cname in probes.cgroups: self.assertEqual(groups, probes.cgroups[cname]) else: self.assertEqual(groups, [])