|
| 1 | +(ns franzy.serialization.nippy.serialization-tests |
| 2 | + (:require [midje.sweet :refer :all] |
| 3 | + [franzy.serialization.nippy.serializers :as serializers] |
| 4 | + [franzy.serialization.nippy.deserializers :as deserializers]) |
| 5 | + (:import (org.apache.kafka.common.serialization Deserializer Serializer) |
| 6 | + (java.util UUID))) |
| 7 | + |
| 8 | +(facts |
| 9 | + "Nippy serializers/deserializers serialize and deserialize Clojure data structures." :serializers |
| 10 | + (let [serializer (serializers/nippy-serializer) |
| 11 | + deserializer (deserializers/nippy-deserializer) |
| 12 | + topic "music-education" |
| 13 | + data {:good-bands ["New Order" "Joy Division" "The Cure" "The Smiths" "Pulp" "Jesus and Mary Chain"] |
| 14 | + :terrible-bands #{"The Eagles" "Most of American Music in the 90s"} |
| 15 | + :things-pretending-to-be-bands `("Justin Bieber" "Kanye West" "Beonce" "Arcade Fire") |
| 16 | + :good-year 1984 |
| 17 | + :essential-album :script-of-the-bridge-by-the-chameleons |
| 18 | + :most-overrated "Jennifer Lopez" |
| 19 | + :good-music-this-year nil}] |
| 20 | + (fact |
| 21 | + "A nippy serializer is a Kafka serializer." |
| 22 | + (instance? Serializer serializer) => true) |
| 23 | + (fact |
| 24 | + "A nippy deserializer is a Kafka deserializer." |
| 25 | + (instance? Deserializer deserializer) => true) |
| 26 | + (fact |
| 27 | + "A nippy serializer can serialize a string." |
| 28 | + (let [val "Slowdive is under appreciated"] |
| 29 | + (.serialize serializer topic val) =not=> nil |
| 30 | + (->> (.serialize serializer topic val) |
| 31 | + (.deserialize deserializer topic)) => val)) |
| 32 | + (fact |
| 33 | + "A nippy serializer can serialize an number." |
| 34 | + (let [val 1982] |
| 35 | + (.serialize serializer topic val) =not=> nil |
| 36 | + (->> (.serialize serializer topic val) |
| 37 | + (.deserialize deserializer topic)) => val)) |
| 38 | + (fact |
| 39 | + "A nippy serializer can serialize a short." |
| 40 | + (let [val (short 1)] |
| 41 | + (.serialize serializer topic val) =not=> nil |
| 42 | + (->> (.serialize serializer topic val) |
| 43 | + (.deserialize deserializer topic)) => val)) |
| 44 | + (fact |
| 45 | + "A nippy serializer can serialize a long." |
| 46 | + (let [val (long Long/MAX_VALUE)] |
| 47 | + (.serialize serializer topic val) =not=> nil |
| 48 | + (->> (.serialize serializer topic val) |
| 49 | + (.deserialize deserializer topic)) => val)) |
| 50 | + (fact |
| 51 | + "A nippy serializer can serialize an integer." |
| 52 | + (let [val (int Integer/MAX_VALUE)] |
| 53 | + (.serialize serializer topic val) =not=> nil |
| 54 | + (->> (.serialize serializer topic val) |
| 55 | + (.deserialize deserializer topic)) => val)) |
| 56 | + (fact |
| 57 | + "A nippy serializer can serialize a UUID." |
| 58 | + (let [val (UUID/randomUUID)] |
| 59 | + (.serialize serializer topic val) =not=> nil |
| 60 | + (->> (.serialize serializer topic val) |
| 61 | + (.deserialize deserializer topic)) => val)) |
| 62 | + (fact |
| 63 | + "A nippy serializer can serialize a map." |
| 64 | + (let [val {:great-song "porcelain raft - dragonfly"}] |
| 65 | + (.serialize serializer topic val) =not=> nil |
| 66 | + (->> (.serialize serializer topic val) |
| 67 | + (.deserialize deserializer topic)) => val)) |
| 68 | + (fact |
| 69 | + "A nippy serializer can serialize a vector." |
| 70 | + (let [val ["DIIV" "Chapterhouse" "Moose" "Ride"]] |
| 71 | + (.serialize serializer topic val) =not=> nil |
| 72 | + (->> (.serialize serializer topic val) |
| 73 | + (.deserialize deserializer topic)) => val)) |
| 74 | + (fact |
| 75 | + "A nippy serializer can serialize a list." |
| 76 | + (let [val '("Suede" "Blur" "Elbow" "Cast" "Doves")] |
| 77 | + (.serialize serializer topic val) =not=> nil |
| 78 | + (->> (.serialize serializer topic val) |
| 79 | + (.deserialize deserializer topic)) => val)) |
| 80 | + (fact |
| 81 | + "A nippy serializer can serialize a set." |
| 82 | + (let [val #{"Forget That You're Young" "Black Satin" "Hallucinations" "With My Eyes Closed" "Here Comes Mary"}] |
| 83 | + (.serialize serializer topic val) =not=> nil |
| 84 | + (->> (.serialize serializer topic val) |
| 85 | + (.deserialize deserializer topic)) => val)) |
| 86 | + (fact |
| 87 | + "A nippy serializer can serialize a keywords." |
| 88 | + (let [val :raveonettes] |
| 89 | + (.serialize serializer topic val) =not=> nil |
| 90 | + (->> (.serialize serializer topic val) |
| 91 | + (.deserialize deserializer topic)) => val)) |
| 92 | + (fact |
| 93 | + "A nippy serializer can serialize a function, but it's stupid to do so." |
| 94 | + (let [val (fn [x] (+ 1 x))] |
| 95 | + (.serialize serializer topic val) =not=> nil)) |
| 96 | + (fact |
| 97 | + "A nippy serializer should be able to produce the same data in a round trip." :serializers |
| 98 | + (->> (.serialize serializer topic data) |
| 99 | + (.deserialize deserializer topic)) => data) |
| 100 | + (fact |
| 101 | + "A nippy serializer should handle nil data, just in case..." |
| 102 | + (->> (.serialize serializer topic nil) =not=> nil)) |
| 103 | + (fact |
| 104 | + "A nippy deserializer should handle nil data, just in case..." |
| 105 | + (->> (.deserialize deserializer topic nil) =not=> nil)))) |
0 commit comments