blob: 60a66ee51d26f9792a1a824627ce96d6a071bb9a [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#!/usr/bin/env perl
use strict;
use warnings;
use Test::Exception;
use Test::More;
use_ok 'Avro::Protocol';
{
my $spec_proto = <<EOJ;
{
"namespace": "com.acme",
"protocol": "HelloWorld",
"doc": "Protocol Greetings",
"types": [
{"name": "Greeting", "type": "record", "fields": [
{"name": "message", "type": "string"}]},
{"name": "Curse", "type": "error", "fields": [
{"name": "message", "type": "string"}]}
],
"messages": {
"hello": {
"doc": "Say hello.",
"request": [{"name": "greeting", "type": "Greeting" }],
"response": "Greeting",
"errors": ["Curse"]
}
}
}
EOJ
my $p = Avro::Protocol->parse($spec_proto);
ok $p, "proto returned";
isa_ok $p, 'Avro::Protocol';
is $p->fullname, "com.acme.HelloWorld", "fullname";
is $p->name, "HelloWorld", "name";
is $p->namespace, "com.acme", "namespace";
is $p->doc, "Protocol Greetings", "doc";
isa_ok $p->types, 'HASH';
isa_ok $p->types->{Greeting}, 'Avro::Schema::Record';
isa_ok $p->types->{Greeting}->fields_as_hash
->{message}{type}, 'Avro::Schema::Primitive';
isa_ok $p->messages->{hello}, "Avro::Protocol::Message";
is $p->messages->{hello}->doc, "Say hello.";
isa_ok $p->messages->{hello}->errors, "Avro::Schema::Union";
isa_ok $p->messages->{hello}->response, "Avro::Schema::Record";
my $req_params = $p->messages->{hello}->request;
isa_ok $req_params, "ARRAY";
is scalar @$req_params, 1, "one parameter to hello message";
is $req_params->[0]->{name}, "greeting", "greeting field";
is $req_params->[0]->{type}, $p->types->{Greeting}, "same Schema type";
}
done_testing;