+
+
+test_normalize_case :: Test
+test_normalize_case =
+ testCase desc $
+ assertEqual desc expected actual
+ where
+ desc = "normalize_case lowercases DNS names"
+ expected = BS.pack "example.com"
+ actual = normalize_case $ BS.pack "ExAmPlE.COM"
+
+prop_normalize_case_idempotent :: String -> Bool
+prop_normalize_case_idempotent s =
+ (normalize_case . normalize_case) bs == normalize_case bs
+ where
+ bs = BS.pack s
+
+test_normalize_root_adds_dot :: Test
+test_normalize_root_adds_dot =
+ testCase desc $
+ assertEqual desc expected actual
+ where
+ desc = "normalize_root adds a trailing dot"
+ expected = BS.pack "example.com."
+ actual = normalize_root $ BS.pack "example.com"
+
+prop_normalize_root_idempotent :: String -> Bool
+prop_normalize_root_idempotent s =
+ (normalize_root . normalize_root) bs == normalize_root bs
+ where
+ bs = BS.pack s
+
+dns_tests :: Test
+dns_tests =
+ testGroup "DNS Tests" [
+ test_normalize_case,
+ test_normalize_root_adds_dot ]
+
+dns_properties :: Test
+dns_properties =
+ testGroup "DNS Properties" [
+ testProperty
+ "normalize_case is idempotent"
+ prop_normalize_case_idempotent,
+ testProperty
+ "normalize_root is idempotent"
+ prop_normalize_root_idempotent ]