blob: dc6ead359de71cc0a57bbbcb9af5a13bb38df1a0 [file] [log] [blame]
<?php
/**
* 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
*
* https://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.
*/
namespace Apache\Avro\Tests;
use Apache\Avro\Datum\AvroIOBinaryDecoder;
use Apache\Avro\Datum\AvroIOBinaryEncoder;
use Apache\Avro\Datum\AvroIODatumReader;
use Apache\Avro\Datum\AvroIODatumWriter;
use Apache\Avro\IO\AvroStringIO;
use Apache\Avro\Schema\AvroSchema;
use PHPUnit\Framework\TestCase;
class IODatumReaderTest extends TestCase
{
public function testSchemaMatching()
{
$writers_schema = <<<JSON
{ "type": "map",
"values": "bytes" }
JSON;
$readers_schema = $writers_schema;
$this->assertTrue(AvroIODatumReader::schemasMatch(
AvroSchema::parse($writers_schema),
AvroSchema::parse($readers_schema)));
}
public function test_aliased()
{
$writers_schema = AvroSchema::parse(<<<SCHEMA
{"type":"record", "name":"Rec1", "fields":[
{"name":"field1", "type":"int"}
]}
SCHEMA);
$readers_schema = AvroSchema::parse(<<<SCHEMA
{"type":"record", "name":"Rec2", "aliases":["Rec1"], "fields":[
{"name":"field2", "aliases":["field1"], "type":"int"}
]}
SCHEMA);
$io = new AvroStringIO();
$writer = new AvroIODatumWriter();
$writer->writeData($writers_schema, ['field1' => 1], new AvroIOBinaryEncoder($io));
$bin = $io->string();
$reader = new AvroIODatumReader();
$record = $reader->readRecord(
$writers_schema,
$readers_schema,
new AvroIOBinaryDecoder(new AvroStringIO($bin))
);
$this->assertEquals(['field2' => 1], $record);
}
public function testRecordNullField()
{
$schema_json = <<<_JSON
{"name":"member",
"type":"record",
"fields":[{"name":"one", "type":"int"},
{"name":"two", "type":["null", "string"]}
]}
_JSON;
$schema = AvroSchema::parse($schema_json);
$datum = array("one" => 1);
$io = new AvroStringIO();
$writer = new AvroIODatumWriter($schema);
$encoder = new AvroIOBinaryEncoder($io);
$writer->write($datum, $encoder);
$bin = $io->string();
$this->assertSame('0200', bin2hex($bin));
}
}