obj_test.py
  1  """Tests for letsencrypt_apache.obj."""
  2  import unittest
  3  
  4  
  5  class VirtualHostTest(unittest.TestCase):
  6      """Test the VirtualHost class."""
  7  
  8      def setUp(self):
  9          from letsencrypt_apache.obj import Addr
 10          from letsencrypt_apache.obj import VirtualHost
 11  
 12          self.addr1 = Addr.fromstring("127.0.0.1")
 13          self.addr2 = Addr.fromstring("127.0.0.1:443")
 14          self.addr_default = Addr.fromstring("_default_:443")
 15  
 16          self.vhost1 = VirtualHost(
 17              "filep", "vh_path", set([self.addr1]), False, False, "localhost")
 18  
 19          self.vhost1b = VirtualHost(
 20              "filep", "vh_path", set([self.addr1]), False, False, "localhost")
 21  
 22          self.vhost2 = VirtualHost(
 23              "fp", "vhp", set([self.addr2]), False, False, "localhost")
 24  
 25      def test_eq(self):
 26          self.assertTrue(self.vhost1b == self.vhost1)
 27          self.assertFalse(self.vhost1 == self.vhost2)
 28          self.assertEqual(str(self.vhost1b), str(self.vhost1))
 29          self.assertFalse(self.vhost1b == 1234)
 30  
 31      def test_ne(self):
 32          self.assertTrue(self.vhost1 != self.vhost2)
 33          self.assertFalse(self.vhost1 != self.vhost1b)
 34  
 35      def test_conflicts(self):
 36          from letsencrypt_apache.obj import Addr
 37          from letsencrypt_apache.obj import VirtualHost
 38  
 39          complex_vh = VirtualHost(
 40              "fp", "vhp",
 41              set([Addr.fromstring("*:443"), Addr.fromstring("1.2.3.4:443")]),
 42              False, False)
 43          self.assertTrue(complex_vh.conflicts([self.addr1]))
 44          self.assertTrue(complex_vh.conflicts([self.addr2]))
 45          self.assertFalse(complex_vh.conflicts([self.addr_default]))
 46  
 47          self.assertTrue(self.vhost1.conflicts([self.addr2]))
 48          self.assertFalse(self.vhost1.conflicts([self.addr_default]))
 49  
 50          self.assertFalse(self.vhost2.conflicts([self.addr1, self.addr_default]))
 51  
 52      def test_same_server(self):
 53          from letsencrypt_apache.obj import VirtualHost
 54          no_name1 = VirtualHost(
 55              "fp", "vhp", set([self.addr1]), False, False, None)
 56          no_name2 = VirtualHost(
 57              "fp", "vhp", set([self.addr2]), False, False, None)
 58          no_name3 = VirtualHost(
 59              "fp", "vhp", set([self.addr_default]),
 60              False, False, None)
 61          no_name4 = VirtualHost(
 62              "fp", "vhp", set([self.addr2, self.addr_default]),
 63              False, False, None)
 64  
 65          self.assertTrue(self.vhost1.same_server(self.vhost2))
 66          self.assertTrue(no_name1.same_server(no_name2))
 67  
 68          self.assertFalse(self.vhost1.same_server(no_name1))
 69          self.assertFalse(no_name1.same_server(no_name3))
 70          self.assertFalse(no_name1.same_server(no_name4))
 71  
 72  
 73  class AddrTest(unittest.TestCase):
 74      """Test obj.Addr."""
 75      def setUp(self):
 76          from letsencrypt_apache.obj import Addr
 77          self.addr = Addr.fromstring("*:443")
 78  
 79          self.addr1 = Addr.fromstring("127.0.0.1")
 80          self.addr2 = Addr.fromstring("127.0.0.1:*")
 81  
 82          self.addr_defined = Addr.fromstring("127.0.0.1:443")
 83          self.addr_default = Addr.fromstring("_default_:443")
 84  
 85      def test_wildcard(self):
 86          self.assertFalse(self.addr.is_wildcard())
 87          self.assertTrue(self.addr1.is_wildcard())
 88          self.assertTrue(self.addr2.is_wildcard())
 89  
 90      def test_get_sni_addr(self):
 91          from letsencrypt_apache.obj import Addr
 92          self.assertEqual(
 93              self.addr.get_sni_addr("443"), Addr.fromstring("*:443"))
 94          self.assertEqual(
 95              self.addr.get_sni_addr("225"), Addr.fromstring("*:225"))
 96          self.assertEqual(
 97              self.addr1.get_sni_addr("443"), Addr.fromstring("127.0.0.1"))
 98  
 99      def test_conflicts(self):
100          # Note: Defined IP is more important than defined port in match
101          self.assertTrue(self.addr.conflicts(self.addr1))
102          self.assertTrue(self.addr.conflicts(self.addr2))
103          self.assertTrue(self.addr.conflicts(self.addr_defined))
104          self.assertFalse(self.addr.conflicts(self.addr_default))
105  
106          self.assertFalse(self.addr1.conflicts(self.addr))
107          self.assertTrue(self.addr1.conflicts(self.addr_defined))
108          self.assertFalse(self.addr1.conflicts(self.addr_default))
109  
110          self.assertFalse(self.addr_defined.conflicts(self.addr1))
111          self.assertFalse(self.addr_defined.conflicts(self.addr2))
112          self.assertFalse(self.addr_defined.conflicts(self.addr))
113          self.assertFalse(self.addr_defined.conflicts(self.addr_default))
114  
115          self.assertTrue(self.addr_default.conflicts(self.addr))
116          self.assertTrue(self.addr_default.conflicts(self.addr1))
117          self.assertTrue(self.addr_default.conflicts(self.addr_defined))
118  
119          # Self test
120          self.assertTrue(self.addr.conflicts(self.addr))
121          self.assertTrue(self.addr1.conflicts(self.addr1))
122          # This is a tricky one...
123          self.assertTrue(self.addr1.conflicts(self.addr2))
124  
125      def test_equal(self):
126          self.assertTrue(self.addr1 == self.addr2)
127          self.assertFalse(self.addr == self.addr1)
128          self.assertFalse(self.addr == 123)
129  
130      def test_not_equal(self):
131          self.assertFalse(self.addr1 != self.addr2)
132          self.assertTrue(self.addr != self.addr1)
133  
134  
135  if __name__ == "__main__":
136      unittest.main()  # pragma: no cover