diff -pruN 1.12.0-1/debian/changelog 1.12.0-0ubuntu3/debian/changelog
--- 1.12.0-1/debian/changelog	2016-01-14 05:24:22.000000000 +0000
+++ 1.12.0-0ubuntu3/debian/changelog	2015-12-15 19:37:25.000000000 +0000
@@ -1,10 +1,33 @@
-dnspython3 (1.12.0-1) unstable; urgency=medium
+dnspython3 (1.12.0-0ubuntu3) xenial; urgency=medium
+
+  * debian/patches/skip-tests-require-inet.patch: Skip tests that require
+    Internet connection.
+
+ -- Andres Rodriguez <andreserl@ubuntu.com>  Tue, 15 Dec 2015 14:36:58 -0500
+
+dnspython3 (1.12.0-0ubuntu2) xenial; urgency=medium
+
+  * Enable test suite to allow packaged to be MIR'd (LP: #1518800):
+    - debian/control: Depend on python3-crypto, python3-nose.
+    - debian/rules: override_dh_auto_test.
+    - debian/patches/fallback_procotol_codes.patch: When trying to get
+      protocal, ensure we have a fallback to ensure. Allows tests to not
+      fail because the build environment cannot bind the protocol.
+
+ -- Andres Rodriguez <andreserl@ubuntu.com>  Tue, 15 Dec 2015 12:59:33 -0500
+
+dnspython3 (1.12.0-0ubuntu1) xenial; urgency=medium
 
   * New upstream release
-  * Add explicit build-depends on dh-python
-  * Bump standards version to 3.9.6 without further change
+  * Add explicit build-dep on dh-python to make use of the newer version
+
+ -- Andres Rodriguez <andreserl@ubuntu.com>  Tue, 15 Dec 2015 12:47:36 -0500
+
+dnspython3 (1.11.1-1build1) wily; urgency=medium
+
+  * No-change rebuild for python3.5 transition
 
- -- Scott Kitterman <scott@kitterman.com>  Thu, 14 Jan 2016 00:24:13 -0500
+ -- Steve Langasek <steve.langasek@ubuntu.com>  Wed, 22 Jul 2015 06:41:14 +0000
 
 dnspython3 (1.11.1-1) unstable; urgency=low
 
diff -pruN 1.12.0-1/debian/control 1.12.0-0ubuntu3/debian/control
--- 1.12.0-1/debian/control	2016-01-14 05:22:08.000000000 +0000
+++ 1.12.0-0ubuntu3/debian/control	2015-12-15 17:58:50.000000000 +0000
@@ -1,14 +1,16 @@
 Source: dnspython3
 Section: python
 Priority: optional
-Maintainer: Debian Python Modules Team <python-modules-team@lists.alioth.debian.org>
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+XSBC-Original-Maintainer: Debian Python Modules Team <python-modules-team@lists.alioth.debian.org>
 Uploaders: Robert S. Edmonds <edmonds@debian.org>, Matthew Grant <matthewgrant5@gmail.com>, Scott Kitterman <scott@kitterman.com>
-Build-Depends: debhelper (>= 8.1), python3-all (>= 3.2), dh-python
+Build-Depends: debhelper (>= 8.1), python3-all (>= 3.2), dh-python,
+ python3-nose, python3-crypto
 Homepage: http://www.dnspython.org
-Standards-Version: 3.9.6
+Standards-Version: 3.9.5
 X-Python3-Version: >= 3.2
-Vcs-Git: git://anonscm.debian.org/python-modules/packages/dnspython3.git
-Vcs-Browser: https://anonscm.debian.org/cgit/python-modules/packages/dnspython3.git
+Vcs-Svn: svn://anonscm.debian.org/python-modules/packages/dnspython3/trunk/
+Vcs-Browser: http://anonscm.debian.org/viewvc/python-modules/packages/dnspython3/trunk/
 
 Package: python3-dnspython
 Architecture: all
diff -pruN 1.12.0-1/debian/.git-dpm 1.12.0-0ubuntu3/debian/.git-dpm
--- 1.12.0-1/debian/.git-dpm	2016-01-14 05:16:13.000000000 +0000
+++ 1.12.0-0ubuntu3/debian/.git-dpm	1970-01-01 00:00:00.000000000 +0000
@@ -1,11 +0,0 @@
-# see git-dpm(1) from git-dpm package
-11befa72e1fe52835c1e25557601cbef51abf2b6
-11befa72e1fe52835c1e25557601cbef51abf2b6
-11befa72e1fe52835c1e25557601cbef51abf2b6
-11befa72e1fe52835c1e25557601cbef51abf2b6
-dnspython3_1.12.0.orig.tar.gz
-daaad12af6b2f9cf78e6eb7c5d2079d225c88224
-132470
-debianTag="debian/%e%v"
-patchedTag="patched/%e%v"
-upstreamTag="upstream/%e%u"
diff -pruN 1.12.0-1/debian/patches/fallback_procotol_codes.patch 1.12.0-0ubuntu3/debian/patches/fallback_procotol_codes.patch
--- 1.12.0-1/debian/patches/fallback_procotol_codes.patch	1970-01-01 00:00:00.000000000 +0000
+++ 1.12.0-0ubuntu3/debian/patches/fallback_procotol_codes.patch	2015-12-15 19:07:56.000000000 +0000
@@ -0,0 +1,22 @@
+Index: dnspython3-1.12.0/dns/rdtypes/IN/WKS.py
+===================================================================
+--- dnspython3-1.12.0.orig/dns/rdtypes/IN/WKS.py
++++ dnspython3-1.12.0/dns/rdtypes/IN/WKS.py
+@@ -20,8 +20,15 @@ import dns.ipv4
+ import dns.rdata
+ import dns.util
+ 
+-_proto_tcp = socket.getprotobyname('tcp')
+-_proto_udp = socket.getprotobyname('udp')
++try:
++    _proto_tcp = socket.getprotobyname('tcp')
++except:
++    _proto_tcp = 6
++
++try:
++    _proto_udp = socket.getprotobyname('udp')
++except:
++    _proto_udp = 17
+ 
+ class WKS(dns.rdata.Rdata):
+     """WKS record
diff -pruN 1.12.0-1/debian/patches/series 1.12.0-0ubuntu3/debian/patches/series
--- 1.12.0-1/debian/patches/series	1970-01-01 00:00:00.000000000 +0000
+++ 1.12.0-0ubuntu3/debian/patches/series	2015-12-15 19:34:50.000000000 +0000
@@ -0,0 +1,2 @@
+fallback_procotol_codes.patch
+skip-tests-require-inet.patch
diff -pruN 1.12.0-1/debian/patches/skip-tests-require-inet.patch 1.12.0-0ubuntu3/debian/patches/skip-tests-require-inet.patch
--- 1.12.0-1/debian/patches/skip-tests-require-inet.patch	1970-01-01 00:00:00.000000000 +0000
+++ 1.12.0-0ubuntu3/debian/patches/skip-tests-require-inet.patch	2015-12-15 19:36:52.000000000 +0000
@@ -0,0 +1,26 @@
+Index: dnspython3-1.12.0/tests/test_resolver.py
+===================================================================
+--- dnspython3-1.12.0.orig/tests/test_resolver.py
++++ dnspython3-1.12.0/tests/test_resolver.py
+@@ -78,18 +78,21 @@ class BaseResolverTests(object):
+         self.assertTrue(cache.get((name, dns.rdatatype.A, dns.rdataclass.IN))
+                         is None)
+ 
++    @unittest.skip("Skipping test as requires Internet connection")
+     def testZoneForName1(self):
+         name = dns.name.from_text('www.dnspython.org.')
+         ezname = dns.name.from_text('dnspython.org.')
+         zname = dns.resolver.zone_for_name(name)
+         self.assertTrue(zname == ezname)
+ 
++    @unittest.skip("Skipping test as requires Internet connection")
+     def testZoneForName2(self):
+         name = dns.name.from_text('a.b.www.dnspython.org.')
+         ezname = dns.name.from_text('dnspython.org.')
+         zname = dns.resolver.zone_for_name(name)
+         self.assertTrue(zname == ezname)
+ 
++    @unittest.skip("Skipping test as requires Internet connection")
+     def testZoneForName3(self):
+         name = dns.name.from_text('dnspython.org.')
+         ezname = dns.name.from_text('dnspython.org.')
diff -pruN 1.12.0-1/debian/rules 1.12.0-0ubuntu3/debian/rules
--- 1.12.0-1/debian/rules	2016-01-14 05:16:13.000000000 +0000
+++ 1.12.0-0ubuntu3/debian/rules	2015-12-15 17:59:26.000000000 +0000
@@ -13,6 +13,9 @@ install-python%:
 
 override_dh_auto_install: $(PYTHON3:%=install-python%)
 
+override_dh_auto_test:
+	cd tests; PYTHONPATH=.. nosetests3 *.py
+
 override_dh_auto_clean:
 	dh_clean
 	rm -rf build
diff -pruN 1.12.0-1/dns/rdtypes/IN/WKS.py 1.12.0-0ubuntu3/dns/rdtypes/IN/WKS.py
--- 1.12.0-1/dns/rdtypes/IN/WKS.py	2011-07-09 14:08:27.000000000 +0000
+++ 1.12.0-0ubuntu3/dns/rdtypes/IN/WKS.py	2016-01-14 10:38:42.000000000 +0000
@@ -20,8 +20,15 @@ import dns.ipv4
 import dns.rdata
 import dns.util
 
-_proto_tcp = socket.getprotobyname('tcp')
-_proto_udp = socket.getprotobyname('udp')
+try:
+    _proto_tcp = socket.getprotobyname('tcp')
+except:
+    _proto_tcp = 6
+
+try:
+    _proto_udp = socket.getprotobyname('udp')
+except:
+    _proto_udp = 17
 
 class WKS(dns.rdata.Rdata):
     """WKS record
diff -pruN 1.12.0-1/.pc/applied-patches 1.12.0-0ubuntu3/.pc/applied-patches
--- 1.12.0-1/.pc/applied-patches	1970-01-01 00:00:00.000000000 +0000
+++ 1.12.0-0ubuntu3/.pc/applied-patches	2016-01-14 10:38:42.481288828 +0000
@@ -0,0 +1,2 @@
+fallback_procotol_codes.patch
+skip-tests-require-inet.patch
diff -pruN 1.12.0-1/.pc/fallback_procotol_codes.patch/dns/rdtypes/IN/WKS.py 1.12.0-0ubuntu3/.pc/fallback_procotol_codes.patch/dns/rdtypes/IN/WKS.py
--- 1.12.0-1/.pc/fallback_procotol_codes.patch/dns/rdtypes/IN/WKS.py	1970-01-01 00:00:00.000000000 +0000
+++ 1.12.0-0ubuntu3/.pc/fallback_procotol_codes.patch/dns/rdtypes/IN/WKS.py	2011-07-09 14:08:27.000000000 +0000
@@ -0,0 +1,110 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import socket
+import struct
+
+import dns.ipv4
+import dns.rdata
+import dns.util
+
+_proto_tcp = socket.getprotobyname('tcp')
+_proto_udp = socket.getprotobyname('udp')
+
+class WKS(dns.rdata.Rdata):
+    """WKS record
+
+    @ivar address: the address
+    @type address: string
+    @ivar protocol: the protocol
+    @type protocol: int
+    @ivar bitmap: the bitmap
+    @type bitmap: bytes
+    @see: RFC 1035"""
+
+    __slots__ = ['address', 'protocol', 'bitmap']
+
+    def __init__(self, rdclass, rdtype, address, protocol, bitmap):
+        super(WKS, self).__init__(rdclass, rdtype)
+        self.address = address
+        self.protocol = protocol
+        self.bitmap = bitmap
+
+    def to_text(self, origin=None, relativize=True, **kw):
+        bits = []
+        for i in range(0, len(self.bitmap)):
+            byte = self.bitmap[i]
+            for j in range(0, 8):
+                if byte & (0x80 >> j):
+                    bits.append(str(i * 8 + j))
+        text = ' '.join(bits)
+        return '%s %d %s' % (self.address, self.protocol, text)
+
+    def from_text(cls, rdclass, rdtype, tok, origin = None, relativize = True):
+        address = tok.get_string()
+        protocol = tok.get_string()
+        if protocol.isdigit():
+            protocol = int(protocol)
+        else:
+            protocol = socket.getprotobyname(protocol)
+        bitmap = bytearray(32 * 256)
+        while 1:
+            token = tok.get().unescape()
+            if token.is_eol_or_eof():
+                break
+            if token.value.isdigit():
+                serv = int(token.value)
+            else:
+                if protocol != _proto_udp and protocol != _proto_tcp:
+                    raise NotImplementedError("protocol must be TCP or UDP")
+                if protocol == _proto_udp:
+                    protocol_text = "udp"
+                else:
+                    protocol_text = "tcp"
+                serv = socket.getservbyname(token.value, protocol_text)
+            i = serv // 8
+            bitmap[i] = bitmap[i] | (0x80 >> (serv % 8))
+        bitmap = dns.rdata._truncate_bitmap(bitmap)
+        return cls(rdclass, rdtype, address, protocol, bitmap)
+
+    from_text = classmethod(from_text)
+
+    def to_wire(self, file, compress = None, origin = None):
+        file.write(dns.ipv4.inet_aton(self.address))
+        protocol = struct.pack('!B', self.protocol)
+        file.write(protocol)
+        file.write(self.bitmap)
+
+    def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin = None):
+        address = dns.ipv4.inet_ntoa(wire[current : current + 4])
+        protocol, = struct.unpack('!B', wire[current + 4 : current + 5])
+        current += 5
+        rdlen -= 5
+        bitmap = wire[current : current + rdlen].unwrap()
+        return cls(rdclass, rdtype, address, protocol, bitmap)
+
+    from_wire = classmethod(from_wire)
+
+    def _cmp(self, other):
+        sa = dns.ipv4.inet_aton(self.address)
+        oa = dns.ipv4.inet_aton(other.address)
+        v = dns.util.cmp(sa, oa)
+        if v == 0:
+            sp = struct.pack('!B', self.protocol)
+            op = struct.pack('!B', other.protocol)
+            v = dns.util.cmp(sp, op)
+            if v == 0:
+                v = dns.util.cmp(self.bitmap, other.bitmap)
+        return v
diff -pruN 1.12.0-1/.pc/skip-tests-require-inet.patch/tests/test_resolver.py 1.12.0-0ubuntu3/.pc/skip-tests-require-inet.patch/tests/test_resolver.py
--- 1.12.0-1/.pc/skip-tests-require-inet.patch/tests/test_resolver.py	1970-01-01 00:00:00.000000000 +0000
+++ 1.12.0-0ubuntu3/.pc/skip-tests-require-inet.patch/tests/test_resolver.py	2011-07-09 14:08:27.000000000 +0000
@@ -0,0 +1,127 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import io
+import select
+import sys
+import time
+import unittest
+
+import dns.name
+import dns.message
+import dns.name
+import dns.rdataclass
+import dns.rdatatype
+import dns.resolver
+
+resolv_conf = """
+    /t/t
+# comment 1
+; comment 2
+domain foo
+nameserver 10.0.0.1
+nameserver 10.0.0.2
+"""
+
+message_text = """id 1234
+opcode QUERY
+rcode NOERROR
+flags QR AA RD
+;QUESTION
+example. IN A
+;ANSWER
+example. 1 IN A 10.0.0.1
+;AUTHORITY
+;ADDITIONAL
+"""
+
+class BaseResolverTests(object):
+
+    if sys.platform != 'win32':
+        def testRead(self):
+            f = io.StringIO(resolv_conf)
+            r = dns.resolver.Resolver(f)
+            self.assertTrue(r.nameservers == ['10.0.0.1', '10.0.0.2'] and
+                            r.domain == dns.name.from_text('foo'))
+
+    def testCacheExpiration(self):
+        message = dns.message.from_text(message_text)
+        name = dns.name.from_text('example.')
+        answer = dns.resolver.Answer(name, dns.rdatatype.A, dns.rdataclass.IN,
+                                     message)
+        cache = dns.resolver.Cache()
+        cache.put((name, dns.rdatatype.A, dns.rdataclass.IN), answer)
+        time.sleep(2)
+        self.assertTrue(cache.get((name, dns.rdatatype.A, dns.rdataclass.IN))
+                        is None)
+
+    def testCacheCleaning(self):
+        message = dns.message.from_text(message_text)
+        name = dns.name.from_text('example.')
+        answer = dns.resolver.Answer(name, dns.rdatatype.A, dns.rdataclass.IN,
+                                     message)
+        cache = dns.resolver.Cache(cleaning_interval=1.0)
+        cache.put((name, dns.rdatatype.A, dns.rdataclass.IN), answer)
+        time.sleep(2)
+        self.assertTrue(cache.get((name, dns.rdatatype.A, dns.rdataclass.IN))
+                        is None)
+
+    def testZoneForName1(self):
+        name = dns.name.from_text('www.dnspython.org.')
+        ezname = dns.name.from_text('dnspython.org.')
+        zname = dns.resolver.zone_for_name(name)
+        self.assertTrue(zname == ezname)
+
+    def testZoneForName2(self):
+        name = dns.name.from_text('a.b.www.dnspython.org.')
+        ezname = dns.name.from_text('dnspython.org.')
+        zname = dns.resolver.zone_for_name(name)
+        self.assertTrue(zname == ezname)
+
+    def testZoneForName3(self):
+        name = dns.name.from_text('dnspython.org.')
+        ezname = dns.name.from_text('dnspython.org.')
+        zname = dns.resolver.zone_for_name(name)
+        self.assertTrue(zname == ezname)
+
+    def testZoneForName4(self):
+        def bad():
+            name = dns.name.from_text('dnspython.org', None)
+            zname = dns.resolver.zone_for_name(name)
+        self.assertRaises(dns.resolver.NotAbsolute, bad)
+
+class PollingMonkeyPatchMixin(object):
+    def setUp(self):
+        self.__native_polling_backend = dns.query._polling_backend
+        dns.query._set_polling_backend(self.polling_backend())
+
+        unittest.TestCase.setUp(self)
+
+    def tearDown(self):
+        dns.query._set_polling_backend(self.__native_polling_backend)
+
+        unittest.TestCase.tearDown(self)
+
+class SelectResolverTestCase(PollingMonkeyPatchMixin, BaseResolverTests, unittest.TestCase):
+    def polling_backend(self):
+        return dns.query._select_for
+
+if hasattr(select, 'poll'):
+    class PollResolverTestCase(PollingMonkeyPatchMixin, BaseResolverTests, unittest.TestCase):
+        def polling_backend(self):
+            return dns.query._poll_for
+
+if __name__ == '__main__':
+    unittest.main()
diff -pruN 1.12.0-1/tests/test_resolver.py 1.12.0-0ubuntu3/tests/test_resolver.py
--- 1.12.0-1/tests/test_resolver.py	2011-07-09 14:08:27.000000000 +0000
+++ 1.12.0-0ubuntu3/tests/test_resolver.py	2016-01-14 10:38:42.000000000 +0000
@@ -78,18 +78,21 @@ class BaseResolverTests(object):
         self.assertTrue(cache.get((name, dns.rdatatype.A, dns.rdataclass.IN))
                         is None)
 
+    @unittest.skip("Skipping test as requires Internet connection")
     def testZoneForName1(self):
         name = dns.name.from_text('www.dnspython.org.')
         ezname = dns.name.from_text('dnspython.org.')
         zname = dns.resolver.zone_for_name(name)
         self.assertTrue(zname == ezname)
 
+    @unittest.skip("Skipping test as requires Internet connection")
     def testZoneForName2(self):
         name = dns.name.from_text('a.b.www.dnspython.org.')
         ezname = dns.name.from_text('dnspython.org.')
         zname = dns.resolver.zone_for_name(name)
         self.assertTrue(zname == ezname)
 
+    @unittest.skip("Skipping test as requires Internet connection")
     def testZoneForName3(self):
         name = dns.name.from_text('dnspython.org.')
         ezname = dns.name.from_text('dnspython.org.')
