3 # Unix SMB/CIFS implementation.
4 # Copyright (C) Amitay Isaacs <amitay@gmail.com> 2011
6 # This program is free software; you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; either version 3 of the License, or
9 # (at your option) any later version.
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License
17 # along with this program. If not, see <http://www.gnu.org/licenses/>.
20 """Tests for samba.dcerpc.dnsserver"""
22 from samba
.dcerpc
import dnsp
, dnsserver
23 from samba
.tests
import RpcInterfaceTestCase
, env_get_var_value
24 from samba
.netcmd
.dns
import ARecord
26 class DnsserverTests(RpcInterfaceTestCase
):
29 super(DnsserverTests
, self
).setUp()
30 self
.server
= env_get_var_value("SERVER_IP")
31 self
.zone
= env_get_var_value("REALM").lower()
32 self
.conn
= dnsserver
.dnsserver("ncacn_ip_tcp:%s" % (self
.server
),
34 self
.get_credentials())
36 def test_operation2(self
):
40 def test_query2(self
):
41 typeid
, result
= self
.conn
.DnssrvQuery2(dnsserver
.DNS_CLIENT_VERSION_W2K
,
46 self
.assertEquals(dnsserver
.DNSSRV_TYPEID_SERVER_INFO_W2K
, typeid
)
48 typeid
, result
= self
.conn
.DnssrvQuery2(dnsserver
.DNS_CLIENT_VERSION_DOTNET
,
53 self
.assertEquals(dnsserver
.DNSSRV_TYPEID_SERVER_INFO_DOTNET
, typeid
)
55 typeid
, result
= self
.conn
.DnssrvQuery2(dnsserver
.DNS_CLIENT_VERSION_LONGHORN
,
60 self
.assertEquals(dnsserver
.DNSSRV_TYPEID_SERVER_INFO
, typeid
)
63 def test_complexoepration2(self
):
64 client_version
= dnsserver
.DNS_CLIENT_VERSION_LONGHORN
65 request_filter
= dnsserver
.DNS_ZONE_REQUEST_PRIMARY
66 typeid
, zones
= self
.conn
.DnssrvComplexOperation2(client_version
,
71 dnsserver
.DNSSRV_TYPEID_DWORD
,
73 self
.assertEquals(dnsserver
.DNSSRV_TYPEID_ZONE_LIST
, typeid
)
74 self
.assertEquals(2, zones
.dwZoneCount
)
77 def test_enumrecords2(self
):
78 client_version
= dnsserver
.DNS_CLIENT_VERSION_LONGHORN
79 record_type
= dnsp
.DNS_TYPE_NS
80 select_flags
= (dnsserver
.DNS_RPC_VIEW_ROOT_HINT_DATA |
81 dnsserver
.DNS_RPC_VIEW_ADDITIONAL_DATA
)
82 buflen
, roothints
= self
.conn
.DnssrvEnumRecords2(client_version
,
92 self
.assertEquals(14, roothints
.count
) # 1 NS + 13 A records (a-m)
95 def test_updaterecords2(self
):
96 client_version
= dnsserver
.DNS_CLIENT_VERSION_LONGHORN
97 record_type
= dnsp
.DNS_TYPE_A
98 select_flags
= dnsserver
.DNS_RPC_VIEW_AUTHORITY_DATA
101 rec
= ARecord('1.2.3.4')
102 rec2
= ARecord('5.6.7.8')
105 add_rec_buf
= dnsserver
.DNS_RPC_RECORD_BUF()
106 add_rec_buf
.rec
= rec
107 self
.conn
.DnssrvUpdateRecord2(client_version
,
115 buflen
, result
= self
.conn
.DnssrvEnumRecords2(client_version
,
125 self
.assertEquals(1, result
.count
)
126 self
.assertEquals(1, result
.rec
[0].wRecordCount
)
127 self
.assertEquals(dnsp
.DNS_TYPE_A
, result
.rec
[0].records
[0].wType
)
128 self
.assertEquals('1.2.3.4', result
.rec
[0].records
[0].data
)
131 add_rec_buf
= dnsserver
.DNS_RPC_RECORD_BUF()
132 add_rec_buf
.rec
= rec2
133 del_rec_buf
= dnsserver
.DNS_RPC_RECORD_BUF()
134 del_rec_buf
.rec
= rec
135 self
.conn
.DnssrvUpdateRecord2(client_version
,
143 buflen
, result
= self
.conn
.DnssrvEnumRecords2(client_version
,
153 self
.assertEquals(1, result
.count
)
154 self
.assertEquals(1, result
.rec
[0].wRecordCount
)
155 self
.assertEquals(dnsp
.DNS_TYPE_A
, result
.rec
[0].records
[0].wType
)
156 self
.assertEquals('5.6.7.8', result
.rec
[0].records
[0].data
)
159 del_rec_buf
= dnsserver
.DNS_RPC_RECORD_BUF()
160 del_rec_buf
.rec
= rec2
161 self
.conn
.DnssrvUpdateRecord2(client_version
,
169 self
.assertRaises(RuntimeError, self
.conn
.DnssrvEnumRecords2
,