Author: philz
Date: Thu Jan 21 23:19:19 2010
New Revision: 901919
URL: http://svn.apache.org/viewvc?rev=901919&view=rev
Log:
AVRO-363. estSchema had two tests disabled; new test for named schemas named
after primitives. (philz)
Modified:
hadoop/avro/trunk/CHANGES.txt
hadoop/avro/trunk/lang/java/src/java/org/apache/avro/Schema.java
hadoop/avro/trunk/lang/java/src/java/org/apache/avro/generic/GenericDatumReader.java
hadoop/avro/trunk/lang/java/src/test/java/org/apache/avro/TestSchema.java
Modified: hadoop/avro/trunk/CHANGES.txt
URL:
http://svn.apache.org/viewvc/hadoop/avro/trunk/CHANGES.txt?rev=901919&r1=901918&r2=901919&view=diff
==============================================================================
--- hadoop/avro/trunk/CHANGES.txt (original)
+++ hadoop/avro/trunk/CHANGES.txt Thu Jan 21 23:19:19 2010
@@ -253,6 +253,9 @@
AVRO-345. Optimization for ResolvingDecoder (thiru)
+ AVRO-363. estSchema had two tests disabled; new test for named schemas
+ named after primitives. (philz)
+
BUG FIXES
AVRO-176. Safeguard against bad istreams before reading. (sbanacho)
Modified: hadoop/avro/trunk/lang/java/src/java/org/apache/avro/Schema.java
URL:
http://svn.apache.org/viewvc/hadoop/avro/trunk/lang/java/src/java/org/apache/avro/Schema.java?rev=901919&r1=901918&r2=901919&view=diff
==============================================================================
--- hadoop/avro/trunk/lang/java/src/java/org/apache/avro/Schema.java (original)
+++ hadoop/avro/trunk/lang/java/src/java/org/apache/avro/Schema.java Thu Jan 21
23:19:19 2010
@@ -185,6 +185,11 @@
public int getEnumOrdinal(String symbol) {
throw new AvroRuntimeException("Not an enum: "+this);
}
+
+ /** If this is an enum, returns true if it contains given symbol. */
+ public boolean hasEnumSymbol(String symbol) {
+ throw new AvroRuntimeException("Not an enum: "+this);
+ }
/** If this is a record, enum or fixed, returns its name, otherwise the name
* of the primitive type. */
@@ -374,6 +379,9 @@
super(type);
this.name = name;
this.doc = doc;
+ if (PRIMITIVES.containsKey(name.full)) {
+ throw new AvroTypeException("Schemas may not be named after
primitives: " + name.full);
+ }
}
public String getName() { return name.name; }
public String getDoc() { return doc; }
@@ -518,6 +526,8 @@
ordinals.put(symbol, i++);
}
public List<String> getEnumSymbols() { return symbols; }
+ public boolean hasEnumSymbol(String symbol) {
+ return ordinals.containsKey(symbol); }
public int getEnumOrdinal(String symbol) { return ordinals.get(symbol); }
public boolean equals(Object o) {
if (o == this) return true;
@@ -910,4 +920,5 @@
}
}
+
}
Modified:
hadoop/avro/trunk/lang/java/src/java/org/apache/avro/generic/GenericDatumReader.java
URL:
http://svn.apache.org/viewvc/hadoop/avro/trunk/lang/java/src/java/org/apache/avro/generic/GenericDatumReader.java?rev=901919&r1=901918&r2=901919&view=diff
==============================================================================
---
hadoop/avro/trunk/lang/java/src/java/org/apache/avro/generic/GenericDatumReader.java
(original)
+++
hadoop/avro/trunk/lang/java/src/java/org/apache/avro/generic/GenericDatumReader.java
Thu Jan 21 23:19:19 2010
@@ -244,7 +244,12 @@
String name = expected.getName();
if (name != null && !name.equals(actual.getName()))
throw new AvroTypeException("Expected "+expected+", found "+actual);
- return createEnum(actual.getEnumSymbols().get(in.readEnum()), expected);
+ String symbol = actual.getEnumSymbols().get(in.readEnum());
+ if (expected.hasEnumSymbol(symbol)) {
+ return createEnum(symbol, expected);
+ } else {
+ throw new AvroTypeException("Symbol " + symbol + " not in " + expected);
+ }
}
/** Called to create an enum value. May be overridden for alternate enum
Modified:
hadoop/avro/trunk/lang/java/src/test/java/org/apache/avro/TestSchema.java
URL:
http://svn.apache.org/viewvc/hadoop/avro/trunk/lang/java/src/test/java/org/apache/avro/TestSchema.java?rev=901919&r1=901918&r2=901919&view=diff
==============================================================================
--- hadoop/avro/trunk/lang/java/src/test/java/org/apache/avro/TestSchema.java
(original)
+++ hadoop/avro/trunk/lang/java/src/test/java/org/apache/avro/TestSchema.java
Thu Jan 21 23:19:19 2010
@@ -263,7 +263,7 @@
private static void checkParseError(String json) {
try {
- Schema schema = Schema.parse(json);
+ Schema.parse(json);
} catch (SchemaParseException e) {
return;
}
@@ -414,23 +414,17 @@
assertEquals("Wrong toString", expected,
Schema.parse(expected.toString()));
}
- @SuppressWarnings(value="unchecked")
- private static void testNoDefaultField() throws Exception {
+ @Test(expected=AvroTypeException.class)
+ public void testNoDefaultField() throws Exception {
Schema expected =
Schema.parse("{\"type\":\"record\", \"name\":\"Foo\", \"fields\":"+
"[{\"name\":\"f\", \"type\": \"string\"}]}");
- DatumReader in = new GenericDatumReader(ACTUAL, expected);
- try {
- GenericData.Record record = (GenericData.Record)
- in.read(null, new BinaryDecoder(new ByteArrayInputStream(new
byte[0])));
- } catch (AvroTypeException e) {
- return;
- }
- fail("Should not read: "+expected);
+ DatumReader<Object> in = new GenericDatumReader<Object>(ACTUAL, expected);
+ in.read(null, new BinaryDecoder(new ByteArrayInputStream(new byte[0])));
}
- @SuppressWarnings(value="unchecked")
- private static void testEnumMismatch() throws Exception {
+ @Test
+ public void testEnumMismatch() throws Exception {
Schema actual = Schema.parse
("{\"type\":\"enum\",\"name\":\"E\",\"symbols\":[\"X\",\"Y\"]}");
Schema expected = Schema.parse
@@ -442,14 +436,23 @@
writer.write("X", encoder);
byte[] data = out.toByteArray();
Decoder decoder = new BinaryDecoder(new ByteArrayInputStream(data));
- DatumReader in = new GenericDatumReader(actual, expected);
+ DatumReader<String> in = new GenericDatumReader<String>(actual, expected);
assertEquals("Wrong value", "Y", in.read(null, decoder));
try {
in.read(null, decoder);
+ fail("Should have thrown exception.");
} catch (AvroTypeException e) {
- return;
+ // expected
}
- fail("Should not read: "+expected);
}
+ @Test(expected=AvroTypeException.class)
+ public void testRecordWithPrimitiveName() {
+ Schema.parse("{\"type\":\"record\", \"name\":\"string\", \"fields\": []}");
+ }
+
+ @Test(expected=AvroTypeException.class)
+ public void testEnumWithPrimitiveName() {
+ Schema.parse("{\"type\":\"enum\", \"name\":\"null\", \"symbols\":
[\"A\"]}");
+ }
}