cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From gdusba...@apache.org
Subject svn commit: r1053643 - /cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/db/marshal/TypeValidationTest.java
Date Wed, 29 Dec 2010 14:37:09 GMT
Author: gdusbabek
Date: Wed Dec 29 14:37:09 2010
New Revision: 1053643

URL: http://svn.apache.org/viewvc?rev=1053643&view=rev
Log:
add missed test that should have been included in CASSANDRA-1814

Added:
    cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/db/marshal/TypeValidationTest.java

Added: cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/db/marshal/TypeValidationTest.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/db/marshal/TypeValidationTest.java?rev=1053643&view=auto
==============================================================================
--- cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/db/marshal/TypeValidationTest.java
(added)
+++ cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/db/marshal/TypeValidationTest.java
Wed Dec 29 14:37:09 2010
@@ -0,0 +1,123 @@
+package org.apache.cassandra.db.marshal;
+
+import com.google.common.base.Charsets;
+import org.apache.cassandra.Util;
+import org.junit.Test;
+import org.safehaus.uuid.UUIDGenerator;
+
+import java.io.UnsupportedEncodingException;
+import java.nio.ByteBuffer;
+import java.nio.CharBuffer;
+import java.util.Random;
+
+/**
+ * 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.
+ */
+
+
+public class TypeValidationTest
+{
+    @Test(expected = MarshalException.class)
+    public void testInvalidAscii()
+    {
+        AsciiType.instance.validate(ByteBuffer.wrap(new byte[]{ (byte)0x80 }));
+    }
+    
+    @Test(expected = MarshalException.class)
+    public void testInvalidTimeUUID()
+    {
+        org.safehaus.uuid.UUID uuid = UUIDGenerator.getInstance().generateRandomBasedUUID();
+        TimeUUIDType.instance.validate(ByteBuffer.wrap(uuid.toByteArray()));
+    }
+    
+    @Test 
+    public void testValidTimeUUID()
+    {
+        org.safehaus.uuid.UUID uuid = UUIDGenerator.getInstance().generateTimeBasedUUID();
+        TimeUUIDType.instance.validate(ByteBuffer.wrap(uuid.toByteArray()));
+    }
+    
+    @Test
+    public void testLong()
+    {
+        LongType.instance.validate(Util.getBytes(5));
+        LongType.instance.validate(Util.getBytes(5555555555555555555L));
+    }
+    
+    @Test
+    public void testValidUtf8() throws UnsupportedEncodingException
+    {
+        assert Character.MAX_CODE_POINT == 0x0010ffff;
+        CharBuffer cb = CharBuffer.allocate(2837314);
+        // let's test all of the unicode space.
+        for (int i = 0; i < Character.MAX_CODE_POINT; i++)
+        {
+            // skip U+D800..U+DFFF. those CPs are invalid in utf8. java tolerates them, but
doesn't convert them to
+            // valid byte sequences (gives us '?' instead), so there is no point testing
them.
+            if (i >= 55296 && i <= 57343)
+                continue;
+            char[] ch = Character.toChars(i);
+            for (char c : ch)
+                cb.append(c);
+        }
+        String s = new String(cb.array());
+        byte[] arr = s.getBytes("UTF8");
+        ByteBuffer buf = ByteBuffer.wrap(arr);
+        UTF8Type.instance.validate(buf);
+        
+        // some you might not expect.
+        UTF8Type.instance.validate(ByteBuffer.wrap(new byte[] {}));
+        // valid Utf8, unspecified in modified utf8.
+        UTF8Type.instance.validate(ByteBuffer.wrap(new byte[] {0}));
+        
+        // modified utf8 null.
+        UTF8Type.instance.validate(ByteBuffer.wrap(new byte[] {99, (byte)0xc0, (byte)0x80,
112}));
+        
+        // edges, for my sanity.
+        UTF8Type.instance.validate(ByteBuffer.wrap(new byte[] {(byte)0xc2, (byte)0x81}));
+        UTF8Type.instance.validate(ByteBuffer.wrap(new byte[] {(byte)0xe0, (byte)0xa0, (byte)0x81}));
+        UTF8Type.instance.validate(ByteBuffer.wrap(new byte[] {(byte)0xf0, (byte)0x90, (byte)0x81,
(byte)0x81}));
+    }
+    
+    // now test for bogies.
+    
+    @Test(expected = MarshalException.class)
+    public void testFloatingc0()
+    {
+        UTF8Type.instance.validate(ByteBuffer.wrap(new byte[] {99, (byte)0xc0, 112}));
+    }
+    
+    @Test(expected = MarshalException.class)
+    public void testInvalid2nd()
+    {
+        UTF8Type.instance.validate(ByteBuffer.wrap(new byte[] {(byte)0xc2, (byte)0xff}));
+    }
+    
+    @Test(expected = MarshalException.class)
+    public void testInvalid3rd()
+    {
+        UTF8Type.instance.validate(ByteBuffer.wrap(new byte[] {(byte)0xe0, (byte)0xa0, (byte)0xff}));
+    }
+    
+    @Test(expected = MarshalException.class)
+    public void testInvalid4th()
+    {
+        UTF8Type.instance.validate(ByteBuffer.wrap(new byte[] {(byte)0xf0, (byte)0x90, (byte)0x81,
(byte)0xff}));
+    }
+    
+    // todo: for completeness, should test invalid two byte pairs.
+}



Mime
View raw message