File: 05_protocol.t

package info (click to toggle)
avro-java 1.8.2-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, forky, sid, trixie
  • size: 12,784 kB
  • sloc: java: 58,236; ansic: 27,618; cpp: 15,332; cs: 12,876; python: 10,443; xml: 6,338; php: 3,836; ruby: 3,158; perl: 1,656; sh: 733; lex: 203; yacc: 140; makefile: 7
file content (76 lines) | stat: -rw-r--r-- 2,452 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# 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;