class DNSBuildTest(TestCase): fixtures = ['dns_build_test.json'] def setUp(self): if not os.path.isdir(BINDBUILD['stage_dir']): os.makedirs(BINDBUILD['stage_dir']) if not os.path.isdir(BINDBUILD['prod_dir']): os.makedirs(BINDBUILD['prod_dir']) remove_dir_contents(BINDBUILD['prod_dir']) if not os.path.isdir(PROD_ORIGIN_DIR): os.makedirs(PROD_ORIGIN_DIR) remove_dir_contents(PROD_ORIGIN_DIR) mgr = GitRepoManager(debug=False, log_syslog=False, config={ 'user.name': 'test', 'user.email': 'test', }) mgr.init(PROD_ORIGIN_DIR, bare=True) mgr.clone(PROD_ORIGIN_DIR, BINDBUILD['prod_dir']) self.builder = DNSBuilder(verbose=False, debug=False, **BINDBUILD) self.builder.repo.commit_and_push(empty=True, message='Initial commit') super(DNSBuildTest, self).setUp() def test_force(self): """Test that the 'force' argument works""" self.builder.build(force=True) self.builder.push(sanity_check=False) rev1 = self.builder.repo.get_revision() sleep(1) # Ensure different serial if rebuilt. self.builder.build() self.builder.push(sanity_check=False) rev2 = self.builder.repo.get_revision() self.assertEqual(rev1, rev2) sleep(1) # Ensure different serial if rebuilt. self.builder.build(force=True) self.builder.push(sanity_check=False) rev3 = self.builder.repo.get_revision() self.assertNotEqual(rev2, rev3) def test_build_queue(self): """Test that the build queue works""" self.builder.build(force=True) self.builder.push(sanity_check=False) rev1 = self.builder.repo.get_revision() CNAME.objects.get(fqdn='foo.example.com').delete() s = StaticInterface.objects.get(fqdn='www.example.com') s.domain.soa.schedule_rebuild() sleep(1) # Ensure different serial if rebuilt. self.builder.build() self.builder.push(sanity_check=False) rev2 = self.builder.repo.get_revision() self.assertNotEqual(rev1, rev2) def test_sanity_check1(self): """Test that the sanity check fails when too many lines are changed""" self.builder.repo.line_change_limit = 2 self.builder.repo.line_removal_limit = 100 self.builder.build(force=True) self.builder.push(sanity_check=False) s = StaticInterface.objects.create( system=System.objects.get(name='Test system'), label='www3', domain=Domain.objects.get(name='example.com'), ip_str='192.168.0.50', mac='01:23:45:01:23:45', ctnr=Ctnr.objects.get(name='Global') ) s.views.add( View.objects.get(name='public'), View.objects.get(name='private')) self.builder.build() self.assertRaises( SanityCheckFailure, self.builder.push, sanity_check=True) def test_sanity_check2(self): """Test that the sanity check fails when too many lines are removed""" self.builder.repo.line_change_limit = 100 self.builder.repo.line_removal_limit = 2 self.builder.build(force=True) self.builder.push(sanity_check=False) CNAME.objects.get(fqdn='foo.example.com').delete() StaticInterface.objects.filter( fqdn__in=('www.example.com', 'www2.example.com')).delete() self.builder.build() self.assertRaises( SanityCheckFailure, self.builder.push, sanity_check=True) def test_sanity_check3(self): """Test that the sanity check succeeds when changes are sane""" self.builder.repo.line_change_limit = 100 self.builder.repo.line_removal_limit = 100 self.builder.build(force=True) self.builder.push(sanity_check=False) CNAME.objects.get(fqdn='foo.example.com').delete() StaticInterface.objects.filter( fqdn__in=('www.example.com', 'www2.example.com')).delete() self.builder.build() self.builder.push(sanity_check=True)