Repository URL to install this package:
|
Version:
0.4.1 ▾
|
describe AvroTurf do
let(:avro) { AvroTurf.new(schemas_path: "spec/schemas/") }
before do
FileUtils.mkdir_p("spec/schemas")
end
describe "#encode" do
before do
define_schema "person.avsc", <<-AVSC
{
"name": "person",
"type": "record",
"fields": [
{
"type": "string",
"name": "full_name"
}
]
}
AVSC
end
it "encodes data with Avro" do
data = {
"full_name" => "John Doe"
}
encoded_data = avro.encode(data, schema_name: "person")
expect(avro.decode(encoded_data)).to eq(data)
end
it "allows specifying a codec that should be used to compress messages" do
compressed_avro = AvroTurf.new(schemas_path: "spec/schemas/", codec: "deflate")
data = {
"full_name" => "John Doe" * 100
}
uncompressed_data = avro.encode(data, schema_name: "person")
compressed_data = compressed_avro.encode(data, schema_name: "person")
expect(compressed_data.bytesize).to be < uncompressed_data.bytesize
expect(compressed_avro.decode(compressed_data)).to eq(data)
end
end
describe "#decode" do
it "decodes Avro data using the inlined writer's schema" do
define_schema "message.avsc", <<-AVSC
{
"name": "message",
"type": "string"
}
AVSC
encoded_data = avro.encode("hello, world", schema_name: "message")
expect(avro.decode(encoded_data)).to eq "hello, world"
end
it "decodes Avro data using a specified reader's schema" do
FileUtils.mkdir_p("spec/schemas/reader")
define_schema "point.avsc", <<-AVSC
{
"name": "point",
"type": "record",
"fields": [
{ "name": "x", "type": "long" },
{ "name": "y", "type": "long" }
]
}
AVSC
define_schema "reader/point.avsc", <<-AVSC
{
"name": "point",
"type": "record",
"fields": [
{ "name": "x", "type": "long" }
]
}
AVSC
encoded_data = avro.encode({ "x" => 42, "y" => 13 }, schema_name: "point")
reader_avro = AvroTurf.new(schemas_path: "spec/schemas/reader")
expect(reader_avro.decode(encoded_data, schema_name: "point")).to eq({ "x" => 42 })
end
end
describe "#encode_to_stream" do
it "writes encoded data to an existing stream" do
define_schema "message.avsc", <<-AVSC
{
"name": "message",
"type": "string"
}
AVSC
stream = StringIO.new
avro.encode_to_stream("hello", stream: stream, schema_name: "message")
expect(avro.decode(stream.string)).to eq "hello"
end
end
describe "#decode_stream" do
it "decodes Avro data from a stream" do
define_schema "message.avsc", <<-AVSC
{
"name": "message",
"type": "string"
}
AVSC
encoded_data = avro.encode("hello", schema_name: "message")
stream = StringIO.new(encoded_data)
expect(avro.decode_stream(stream)).to eq "hello"
end
end
end