1 # Unix SMB/CIFS implementation.
2 # Copyright (C) Catalyst.Net LTD 2015
3 # Copyright (C) Sean Dague <sdague@linux.vnet.ibm.com> 2011
5 # Catalyst.Net's contribution was written by Douglas Bagnall
6 # <douglas.bagnall@catalyst.net.nz>.
8 # This program is free software; you can redistribute it and/or modify
9 # it under the terms of the GNU General Public License as published by
10 # the Free Software Foundation; either version 3 of the License, or
11 # (at your option) any later version.
13 # This program is distributed in the hope that it will be useful,
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 # GNU General Public License for more details.
18 # You should have received a copy of the GNU General Public License
19 # along with this program. If not, see <http://www.gnu.org/licenses/>.
24 from samba.tests.samba_tool.base import SambaToolCmdTest
25 from samba import sites
28 class BaseSitesCmdTestCase(SambaToolCmdTest):
29 """Tests for samba-tool sites subnets"""
31 super(BaseSitesCmdTestCase, self).setUp()
32 self.dburl = "ldap://%s" % os.environ["DC_SERVER"]
33 self.creds_string = "-U%s%%%s" % (os.environ["DC_USERNAME"],
34 os.environ["DC_PASSWORD"])
36 self.samdb = self.getSamDB("-H", self.dburl, self.creds_string)
37 self.config_dn = str(self.samdb.get_config_basedn())
40 class SitesCmdTestCase(BaseSitesCmdTestCase):
42 def test_site_create(self):
45 result, out, err = self.runsubcmd("sites", "create", sitename,
46 "-H", self.dburl, self.creds_string)
47 self.assertCmdSuccess(result, out, err)
49 dnsites = ldb.Dn(self.samdb, "CN=Sites,%s" % self.config_dn)
50 dnsite = ldb.Dn(self.samdb, "CN=%s,%s" % (sitename, dnsites))
52 ret = self.samdb.search(base=dnsites, scope=ldb.SCOPE_ONELEVEL,
53 expression='(dn=%s)' % str(dnsite))
54 self.assertEquals(len(ret), 1)
57 self.samdb.delete(dnsite, ["tree_delete:0"])
60 class SitesSubnetCmdTestCase(BaseSitesCmdTestCase):
62 super(SitesSubnetCmdTestCase, self).setUp()
63 self.sitename = "testsite"
64 self.sitename2 = "testsite2"
65 self.samdb.transaction_start()
66 sites.create_site(self.samdb, self.config_dn, self.sitename)
67 sites.create_site(self.samdb, self.config_dn, self.sitename2)
68 self.samdb.transaction_commit()
71 self.samdb.transaction_start()
72 sites.delete_site(self.samdb, self.config_dn, self.sitename)
73 sites.delete_site(self.samdb, self.config_dn, self.sitename2)
74 self.samdb.transaction_commit()
75 super(SitesSubnetCmdTestCase, self).tearDown()
77 def test_site_subnet_create(self):
78 cidrs = (("10.9.8.0/24", self.sitename),
79 ("50.60.0.0/16", self.sitename2),
80 ("50.61.0.0/16", self.sitename2), # second subnet on the site
81 ("50.0.0.0/8", self.sitename), # overlapping subnet, other site
82 ("50.62.1.2/32", self.sitename), # single IP
83 ("aaaa:bbbb:cccc:dddd:eeee:ffff:2222:1100/120",
87 for cidr, sitename in cidrs:
88 result, out, err = self.runsubcmd("sites", "subnet", "create",
92 self.assertCmdSuccess(result, out, err)
94 ret = self.samdb.search(base=self.config_dn,
95 scope=ldb.SCOPE_SUBTREE,
96 expression=('(&(objectclass=subnet)(cn=%s))'
98 self.assertIsNotNone(ret)
99 self.assertEqual(len(ret), 1)
101 dnsubnets = ldb.Dn(self.samdb,
102 "CN=Subnets,CN=Sites,%s" % self.config_dn)
104 for cidr, sitename in cidrs:
105 dnsubnet = ldb.Dn(self.samdb, ("Cn=%s,CN=Subnets,CN=Sites,%s" %
106 (cidr, self.config_dn)))
108 ret = self.samdb.search(base=dnsubnets, scope=ldb.SCOPE_ONELEVEL,
109 expression='(dn=%s)' % dnsubnet)
110 self.assertIsNotNone(ret)
111 self.assertEqual(len(ret), 1)
112 self.samdb.delete(dnsubnet, ["tree_delete:0"])
114 def test_site_subnet_create_should_fail(self):
115 cidrs = (("10.9.8.0/33", self.sitename), # mask too big
116 ("50.60.0.0/8", self.sitename2), # insufficient zeros
117 ("50.261.0.0/16", self.sitename2), # bad octet
118 ("7.0.0.0.0/0", self.sitename), # insufficient zeros
119 ("aaaa:bbbb:cccc:dddd:eeee:ffff:2222:1100/119",
120 self.sitename), # insufficient zeros
123 for cidr, sitename in cidrs:
124 result, out, err = self.runsubcmd("sites", "subnet", "create",
128 self.assertCmdFail(result)
130 ret = self.samdb.search(base=self.config_dn,
131 scope=ldb.SCOPE_SUBTREE,
132 expression=('(&(objectclass=subnet)(cn=%s))'
135 self.assertIsNotNone(ret)
136 self.assertEqual(len(ret), 0)