You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by el...@apache.org on 2017/04/01 20:36:22 UTC
[30/51] [partial] calcite-avatica git commit: [CALCITE-1717] Remove
Calcite code and lift avatica
http://git-wip-us.apache.org/repos/asf/calcite-avatica/blob/fc7b26c8/avatica/core/src/test/java/org/apache/calcite/avatica/remote/KerberosConnectionTest.java
----------------------------------------------------------------------
diff --git a/avatica/core/src/test/java/org/apache/calcite/avatica/remote/KerberosConnectionTest.java b/avatica/core/src/test/java/org/apache/calcite/avatica/remote/KerberosConnectionTest.java
deleted file mode 100644
index ad98569..0000000
--- a/avatica/core/src/test/java/org/apache/calcite/avatica/remote/KerberosConnectionTest.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * 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.
- */
-package org.apache.calcite.avatica.remote;
-
-import org.apache.calcite.avatica.remote.KerberosConnection.RenewalTask;
-
-import org.junit.Test;
-import org.mockito.Mockito;
-
-import java.io.File;
-import java.util.Locale;
-import java.util.Map.Entry;
-
-import javax.security.auth.Subject;
-import javax.security.auth.login.Configuration;
-import javax.security.auth.login.LoginContext;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.nullable;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-/**
- * Test case for KerberosConnection
- */
-public class KerberosConnectionTest {
-
- @Test(expected = NullPointerException.class) public void testNullArgs() {
- new KerberosConnection(null, null);
- }
-
- @Test public void testThreadConfiguration() {
- KerberosConnection krbUtil = new KerberosConnection("foo", new File("/bar.keytab"));
- Subject subject = new Subject();
- LoginContext context = Mockito.mock(LoginContext.class);
-
- Entry<RenewalTask, Thread> entry = krbUtil.createRenewalThread(context, subject, 10);
- assertNotNull("RenewalTask should not be null", entry.getKey());
- Thread t = entry.getValue();
- assertTrue("Thread name should contain 'Avatica', but is '" + t.getName() + "'",
- t.getName().contains("Avatica"));
- assertTrue(t.isDaemon());
- assertNotNull(t.getUncaughtExceptionHandler());
- }
-
- @Test public void noPreviousContextOnLogin() throws Exception {
- KerberosConnection krbUtil = mock(KerberosConnection.class);
- Subject subject = new Subject();
- Subject loggedInSubject = new Subject();
- Configuration conf = mock(Configuration.class);
- LoginContext context = mock(LoginContext.class);
-
- // Call the real login(LoginContext, Configuration, Subject) method
- when(krbUtil.login(nullable(LoginContext.class), any(Configuration.class), any(Subject.class)))
- .thenCallRealMethod();
- // Return a fake LoginContext
- when(krbUtil.createLoginContext(conf)).thenReturn(context);
- // Return a fake Subject from that fake LoginContext
- when(context.getSubject()).thenReturn(loggedInSubject);
-
- Entry<LoginContext, Subject> pair = krbUtil.login(null, conf, subject);
-
- // Verify we get the fake LoginContext and Subject
- assertEquals(context, pair.getKey());
- assertEquals(loggedInSubject, pair.getValue());
-
- // login should be called on the LoginContext
- verify(context).login();
- }
-
- @Test public void previousContextLoggedOut() throws Exception {
- KerberosConnection krbUtil = mock(KerberosConnection.class);
- Subject subject = new Subject();
- Subject loggedInSubject = new Subject();
- Configuration conf = mock(Configuration.class);
- LoginContext originalContext = mock(LoginContext.class);
- LoginContext context = mock(LoginContext.class);
-
- // Call the real login(LoginContext, Configuration, Subject) method
- when(krbUtil.login(any(LoginContext.class), any(Configuration.class), any(Subject.class)))
- .thenCallRealMethod();
- // Return a fake LoginContext
- when(krbUtil.createLoginContext(conf)).thenReturn(context);
- // Return a fake Subject from that fake LoginContext
- when(context.getSubject()).thenReturn(loggedInSubject);
-
- Entry<LoginContext, Subject> pair = krbUtil.login(originalContext, conf, subject);
-
- // Verify we get the fake LoginContext and Subject
- assertEquals(context, pair.getKey());
- assertEquals(loggedInSubject, pair.getValue());
-
- verify(originalContext).logout();
-
- // login should be called on the LoginContext
- verify(context).login();
- }
-
- @Test public void testTicketRenewalTime() {
- RenewalTask renewal = mock(RenewalTask.class);
- when(renewal.shouldRenew(any(long.class), any(long.class), any(long.class)))
- .thenCallRealMethod();
-
- long start = 0;
- long end = 200;
- long now = 100;
- assertFalse(renewal.shouldRenew(start, end, now));
-
- // Renewal should happen at 80%
- start = 0;
- end = 100;
- now = 80;
- assertTrue(renewal.shouldRenew(start, end, now));
-
- start = 5000;
- // One day
- end = start + 1000 * 60 * 60 * 24;
- // Ten minutes prior to expiration
- now = end - 1000 * 60 * 10;
- assertTrue(
- String.format(Locale.ROOT, "start=%d, end=%d, now=%d", start, end, now),
- renewal.shouldRenew(start, end, now));
- }
-}
-
-// End KerberosConnectionTest.java
http://git-wip-us.apache.org/repos/asf/calcite-avatica/blob/fc7b26c8/avatica/core/src/test/java/org/apache/calcite/avatica/remote/MetaDataOperationTest.java
----------------------------------------------------------------------
diff --git a/avatica/core/src/test/java/org/apache/calcite/avatica/remote/MetaDataOperationTest.java b/avatica/core/src/test/java/org/apache/calcite/avatica/remote/MetaDataOperationTest.java
deleted file mode 100644
index c64b32c..0000000
--- a/avatica/core/src/test/java/org/apache/calcite/avatica/remote/MetaDataOperationTest.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * 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.
- */
-package org.apache.calcite.avatica.remote;
-
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-
-/**
- * Tests for {@link MetaDataOperation}
- */
-public class MetaDataOperationTest {
-
- @Test
- public void testProtobufSerialization() {
- for (MetaDataOperation metadataOp : MetaDataOperation.values()) {
- assertEquals(metadataOp, MetaDataOperation.fromProto(metadataOp.toProto()));
- }
- }
-
-}
-
-// End MetaDataOperationTest.java
http://git-wip-us.apache.org/repos/asf/calcite-avatica/blob/fc7b26c8/avatica/core/src/test/java/org/apache/calcite/avatica/remote/ProtobufHandlerTest.java
----------------------------------------------------------------------
diff --git a/avatica/core/src/test/java/org/apache/calcite/avatica/remote/ProtobufHandlerTest.java b/avatica/core/src/test/java/org/apache/calcite/avatica/remote/ProtobufHandlerTest.java
deleted file mode 100644
index afb15c3..0000000
--- a/avatica/core/src/test/java/org/apache/calcite/avatica/remote/ProtobufHandlerTest.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * 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.
- */
-package org.apache.calcite.avatica.remote;
-
-import org.apache.calcite.avatica.Meta;
-import org.apache.calcite.avatica.Meta.Frame;
-import org.apache.calcite.avatica.metrics.noop.NoopMetricsSystem;
-import org.apache.calcite.avatica.proto.Common;
-import org.apache.calcite.avatica.proto.Common.ColumnValue;
-import org.apache.calcite.avatica.proto.Requests;
-import org.apache.calcite.avatica.proto.Responses;
-import org.apache.calcite.avatica.remote.Handler.HandlerResponse;
-import org.apache.calcite.avatica.remote.Service.FetchRequest;
-import org.apache.calcite.avatica.remote.Service.FetchResponse;
-import org.apache.calcite.avatica.remote.Service.RpcMetadataResponse;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.mockito.Mockito;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.when;
-
-/**
- * Test basic serialization of objects with protocol buffers.
- */
-public class ProtobufHandlerTest {
-
- // Mocks
- private Service service;
- private ProtobufTranslation translation;
-
- // Real objects
- private ProtobufHandler handler;
-
- @Before
- public void setupMocks() {
- // Mocks
- service = Mockito.mock(Service.class);
- translation = Mockito.mock(ProtobufTranslation.class);
-
- // Real objects
- handler = new ProtobufHandler(service, translation, NoopMetricsSystem.getInstance());
- }
-
- @Test
- public void testFetch() throws Exception {
- final String connectionId = "cnxn1";
- final int statementId = 30;
- final long offset = 10;
- final int fetchMaxRowCount = 100;
- final List<Common.TypedValue> values = new ArrayList<>();
-
- values.add(Common.TypedValue.newBuilder().setType(Common.Rep.BOOLEAN).setBoolValue(true)
- .build());
- values.add(Common.TypedValue.newBuilder().setType(Common.Rep.STRING)
- .setStringValue("my_string").build());
-
- Requests.FetchRequest protoRequest = Requests.FetchRequest.newBuilder()
- .setConnectionId(connectionId).setStatementId(statementId)
- .setOffset(offset).setFetchMaxRowCount(fetchMaxRowCount)
- .build();
- byte[] serializedRequest = protoRequest.toByteArray();
-
- FetchRequest request = new FetchRequest().deserialize(protoRequest);
-
- List<Object> frameRows = new ArrayList<>();
- frameRows.add(new Object[] {true, "my_string"});
-
- Meta.Frame frame = Frame.create(0, true, frameRows);
- RpcMetadataResponse metadata = new RpcMetadataResponse("localhost:8765");
- FetchResponse response = new FetchResponse(frame, false, false, metadata);
-
- when(translation.parseRequest(serializedRequest)).thenReturn(request);
- when(service.apply(request)).thenReturn(response);
- when(translation.serializeResponse(response))
- .thenReturn(response.serialize().toByteArray());
-
- HandlerResponse<byte[]> handlerResponse = handler.apply(serializedRequest);
- byte[] serializedResponse = handlerResponse.getResponse();
- assertEquals(200, handlerResponse.getStatusCode());
-
- Responses.FetchResponse protoResponse = Responses.FetchResponse.parseFrom(serializedResponse);
-
- Common.Frame protoFrame = protoResponse.getFrame();
-
- assertEquals(frame.offset, protoFrame.getOffset());
- assertEquals(frame.done, protoFrame.getDone());
-
- List<Common.Row> rows = protoFrame.getRowsList();
- assertEquals(1, rows.size());
- Common.Row row = rows.get(0);
- List<Common.ColumnValue> columnValues = row.getValueList();
- assertEquals(2, columnValues.size());
-
- Iterator<Common.ColumnValue> iter = columnValues.iterator();
- assertTrue(iter.hasNext());
- Common.ColumnValue column = iter.next();
- assertTrue("The Column should have contained a scalar: " + column,
- column.hasField(ColumnValue.getDescriptor()
- .findFieldByNumber(ColumnValue.SCALAR_VALUE_FIELD_NUMBER)));
-
- Common.TypedValue value = column.getScalarValue();
- assertEquals(Common.Rep.BOOLEAN, value.getType());
- assertEquals(true, value.getBoolValue());
-
- assertTrue(iter.hasNext());
- column = iter.next();
- assertTrue("The Column should have contained a scalar: " + column,
- column.hasField(ColumnValue.getDescriptor()
- .findFieldByNumber(ColumnValue.SCALAR_VALUE_FIELD_NUMBER)));
- value = column.getScalarValue();
- assertEquals(Common.Rep.STRING, value.getType());
- assertEquals("my_string", value.getStringValue());
- }
-
-}
-
-// End ProtobufHandlerTest.java
http://git-wip-us.apache.org/repos/asf/calcite-avatica/blob/fc7b26c8/avatica/core/src/test/java/org/apache/calcite/avatica/remote/ProtobufSerializationTest.java
----------------------------------------------------------------------
diff --git a/avatica/core/src/test/java/org/apache/calcite/avatica/remote/ProtobufSerializationTest.java b/avatica/core/src/test/java/org/apache/calcite/avatica/remote/ProtobufSerializationTest.java
deleted file mode 100644
index 39787dd..0000000
--- a/avatica/core/src/test/java/org/apache/calcite/avatica/remote/ProtobufSerializationTest.java
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
- * 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.
- */
-package org.apache.calcite.avatica.remote;
-
-import org.apache.calcite.avatica.AvaticaUtils;
-import org.apache.calcite.avatica.ColumnMetaData.Rep;
-import org.apache.calcite.avatica.Meta.Signature;
-import org.apache.calcite.avatica.Meta.StatementHandle;
-import org.apache.calcite.avatica.proto.Common.WireMessage;
-import org.apache.calcite.avatica.proto.Requests;
-import org.apache.calcite.avatica.remote.Service.Request;
-
-import com.google.protobuf.UnsafeByteOperations;
-
-import org.junit.Assert;
-import org.junit.Test;
-
-import java.io.ByteArrayOutputStream;
-import java.util.Arrays;
-import java.util.List;
-import java.util.UUID;
-
-import static org.junit.Assert.assertEquals;
-
-/**
- * Protobuf serialization tests.
- */
-public class ProtobufSerializationTest {
-
- private Signature getSignature() {
- return null;
- }
-
- private List<TypedValue> getTypedValues() {
- List<TypedValue> paramValues =
- Arrays.asList(TypedValue.create(Rep.BOOLEAN.name(), Boolean.TRUE),
- TypedValue.create(Rep.STRING.name(), "string"));
- return paramValues;
- }
-
- @Test public void testExecuteSerialization() throws Exception {
- Service.ExecuteRequest executeRequest = new Service.ExecuteRequest(
- new StatementHandle("connection", 12345, getSignature()), getTypedValues(), 0);
-
- Requests.ExecuteRequest pbExecuteRequest = executeRequest.serialize();
- ByteArrayOutputStream baos = new ByteArrayOutputStream(1024);
- pbExecuteRequest.writeTo(baos);
-
- byte[] serialized = baos.toByteArray();
- baos.reset();
- WireMessage wireMsg = WireMessage.newBuilder().setName(Requests.ExecuteRequest.class.getName())
- .setWrappedMessage(UnsafeByteOperations.unsafeWrap(serialized)).build();
- wireMsg.writeTo(baos);
- serialized = baos.toByteArray();
-
- ProtobufTranslation translator = new ProtobufTranslationImpl();
-
- Request newRequest = translator.parseRequest(serialized);
-
- Assert.assertEquals(executeRequest, newRequest);
- }
-
- @Test public void testPrepareSerialization() throws Exception {
- final String sql = "SELECT * FROM FOO";
- final String connectionId = UUID.randomUUID().toString();
-
- for (long maxRowCount : Arrays.asList(-1L, 0L, 1L, Long.MAX_VALUE)) {
- Service.PrepareRequest prepareReq = new Service.PrepareRequest(connectionId, sql,
- maxRowCount);
-
- Requests.PrepareRequest prepareProtoReq = prepareReq.serialize();
- assertEquals(maxRowCount, prepareProtoReq.getMaxRowCount());
- assertEquals(maxRowCount, prepareProtoReq.getMaxRowsTotal());
-
- assertEquals(prepareReq, prepareReq.deserialize(prepareProtoReq));
- }
- }
-
- @Test public void testPrepareDeserialization() throws Exception {
- final String sql = "SELECT * FROM FOO";
- final String connectionId = UUID.randomUUID().toString();
- final long maxRowCount = 200L;
-
- // The "current" serialization strategy.
- Requests.PrepareRequest protoPrepare = Requests.PrepareRequest.newBuilder().
- setConnectionId(connectionId).setSql(sql).setMaxRowsTotal(maxRowCount).build();
-
- Service.PrepareRequest prepareReq = new Service.PrepareRequest().deserialize(protoPrepare);
- assertEquals(maxRowCount, prepareReq.maxRowCount);
-
- // The "old" serialization strategy.
- protoPrepare = Requests.PrepareRequest.newBuilder().
- setConnectionId(connectionId).setSql(sql).setMaxRowCount(maxRowCount).build();
-
- prepareReq = new Service.PrepareRequest().deserialize(protoPrepare);
- assertEquals(maxRowCount, prepareReq.maxRowCount);
-
- // Both the new and old provided should default to the new
- protoPrepare = Requests.PrepareRequest.newBuilder().
- setConnectionId(connectionId).setSql(sql).setMaxRowCount(500L)
- .setMaxRowsTotal(maxRowCount).build();
-
- prepareReq = new Service.PrepareRequest().deserialize(protoPrepare);
- assertEquals(maxRowCount, prepareReq.maxRowCount);
- }
-
- @Test public void testPrepareAndExecuteSerialization() throws Exception {
- final String sql = "SELECT * FROM FOO";
- final int statementId = 12345;
- final String connectionId = UUID.randomUUID().toString();
-
- for (long maxRowCount : Arrays.asList(-1L, 0L, 1L, Long.MAX_VALUE)) {
- Service.PrepareAndExecuteRequest prepareAndExecuteReq =
- new Service.PrepareAndExecuteRequest(connectionId, statementId, sql, maxRowCount);
-
- Requests.PrepareAndExecuteRequest prepareAndExecuteProtoReq =
- prepareAndExecuteReq.serialize();
- assertEquals(maxRowCount, prepareAndExecuteProtoReq.getMaxRowCount());
- assertEquals(maxRowCount, prepareAndExecuteProtoReq.getMaxRowsTotal());
- assertEquals(AvaticaUtils.toSaturatedInt(maxRowCount),
- prepareAndExecuteProtoReq.getFirstFrameMaxSize());
-
- assertEquals(prepareAndExecuteReq,
- prepareAndExecuteReq.deserialize(prepareAndExecuteProtoReq));
- }
-
- int maxRowsInFirstFrame = 50;
- for (long maxRowCount : Arrays.asList(-1L, 0L, 1L, Long.MAX_VALUE)) {
- Service.PrepareAndExecuteRequest prepareAndExecuteReq =
- new Service.PrepareAndExecuteRequest(connectionId, statementId, sql, maxRowCount,
- maxRowsInFirstFrame);
-
- Requests.PrepareAndExecuteRequest prepareAndExecuteProtoReq =
- prepareAndExecuteReq.serialize();
- assertEquals(maxRowCount, prepareAndExecuteProtoReq.getMaxRowCount());
- assertEquals(maxRowCount, prepareAndExecuteProtoReq.getMaxRowsTotal());
- assertEquals(maxRowsInFirstFrame, prepareAndExecuteProtoReq.getFirstFrameMaxSize());
-
- assertEquals(prepareAndExecuteReq,
- prepareAndExecuteReq.deserialize(prepareAndExecuteProtoReq));
- }
- }
-
- @Test public void testPrepareAndExecuteDeserialization() throws Exception {
- final String sql = "SELECT * FROM FOO";
- final String connectionId = UUID.randomUUID().toString();
- final long maxRowCount = 200L;
- final int maxRowsInFirstFrame = 50;
-
- // The "current" serialization strategy (maxRowsTotal and firstFrameMaxSize)
- Requests.PrepareAndExecuteRequest protoPrepare = Requests.PrepareAndExecuteRequest.newBuilder().
- setConnectionId(connectionId).setSql(sql).setMaxRowsTotal(maxRowCount).
- setFirstFrameMaxSize(maxRowsInFirstFrame).build();
-
- Service.PrepareAndExecuteRequest prepareAndExecuteReq = new Service.PrepareAndExecuteRequest().
- deserialize(protoPrepare);
- assertEquals(maxRowCount, prepareAndExecuteReq.maxRowCount);
- assertEquals(maxRowsInFirstFrame, prepareAndExecuteReq.maxRowsInFirstFrame);
-
- // The "old" serialization strategy (maxRowCount)
- protoPrepare = Requests.PrepareAndExecuteRequest.newBuilder().
- setConnectionId(connectionId).setSql(sql).setMaxRowCount(maxRowCount).build();
-
- prepareAndExecuteReq = new Service.PrepareAndExecuteRequest().deserialize(protoPrepare);
- assertEquals(maxRowCount, prepareAndExecuteReq.maxRowCount);
- assertEquals(AvaticaUtils.toSaturatedInt(maxRowCount),
- prepareAndExecuteReq.maxRowsInFirstFrame);
-
- // Both the new and old provided should default to the new (firstFrameMaxSize should be the
- // the same as what ultimately is set to maxRowCount)
- protoPrepare = Requests.PrepareAndExecuteRequest.newBuilder().
- setConnectionId(connectionId).setSql(sql).setMaxRowCount(500L)
- .setMaxRowsTotal(maxRowCount).build();
-
- prepareAndExecuteReq = new Service.PrepareAndExecuteRequest().deserialize(protoPrepare);
- assertEquals(maxRowCount, prepareAndExecuteReq.maxRowCount);
- assertEquals(AvaticaUtils.toSaturatedInt(maxRowCount),
- prepareAndExecuteReq.maxRowsInFirstFrame);
-
- // Same as previous example, but explicitly setting maxRowsInFirstFrame too
- protoPrepare = Requests.PrepareAndExecuteRequest.newBuilder().
- setConnectionId(connectionId).setSql(sql).setMaxRowCount(500L)
- .setMaxRowsTotal(maxRowCount).setFirstFrameMaxSize(maxRowsInFirstFrame).build();
-
- prepareAndExecuteReq = new Service.PrepareAndExecuteRequest().deserialize(protoPrepare);
- assertEquals(maxRowCount, prepareAndExecuteReq.maxRowCount);
- assertEquals(maxRowsInFirstFrame, prepareAndExecuteReq.maxRowsInFirstFrame);
- }
-
- @Test public void testFetchRequestSerialization() throws Exception {
- final String connectionId = UUID.randomUUID().toString();
- final int statementId = 12345;
- final long offset = 0L;
-
- for (int maxRowCount : Arrays.asList(-1, 0, 1, Integer.MAX_VALUE)) {
- Service.FetchRequest fetchReq = new Service.FetchRequest(connectionId, statementId,
- offset, maxRowCount);
-
- Requests.FetchRequest fetchProtoReq = fetchReq.serialize();
- assertEquals(maxRowCount, fetchProtoReq.getFetchMaxRowCount());
- assertEquals(maxRowCount, fetchProtoReq.getFrameMaxSize());
-
- assertEquals(fetchReq, fetchReq.deserialize(fetchProtoReq));
- }
- }
-
- @Test public void testFetchRequestDeserialization() throws Exception {
- final String connectionId = UUID.randomUUID().toString();
- final int statementId = 12345;
- final long offset = 0L;
- final int maxSize = 200;
-
- // The "current" serialization strategy.
- Requests.FetchRequest protoFetch = Requests.FetchRequest.newBuilder().
- setConnectionId(connectionId).setStatementId(statementId).
- setOffset(offset).setFrameMaxSize(maxSize).build();
-
- Service.FetchRequest fetchReq = new Service.FetchRequest().deserialize(protoFetch);
- assertEquals(maxSize, fetchReq.fetchMaxRowCount);
-
- // The "old" serialization strategy.
- protoFetch = Requests.FetchRequest.newBuilder().
- setConnectionId(connectionId).setStatementId(statementId).
- setOffset(offset).setFetchMaxRowCount(maxSize).build();
-
- fetchReq = new Service.FetchRequest().deserialize(protoFetch);
- assertEquals(maxSize, fetchReq.fetchMaxRowCount);
-
- // Both the new and old provided should default to the new
- protoFetch = Requests.FetchRequest.newBuilder().
- setConnectionId(connectionId).setStatementId(statementId).
- setOffset(offset).setFetchMaxRowCount(100).setFrameMaxSize(maxSize).build();
-
- fetchReq = new Service.FetchRequest().deserialize(protoFetch);
- assertEquals(maxSize, fetchReq.fetchMaxRowCount);
- }
-}
-
-// End ProtobufSerializationTest.java
http://git-wip-us.apache.org/repos/asf/calcite-avatica/blob/fc7b26c8/avatica/core/src/test/java/org/apache/calcite/avatica/remote/ProtobufServiceTest.java
----------------------------------------------------------------------
diff --git a/avatica/core/src/test/java/org/apache/calcite/avatica/remote/ProtobufServiceTest.java b/avatica/core/src/test/java/org/apache/calcite/avatica/remote/ProtobufServiceTest.java
deleted file mode 100644
index a29ee34..0000000
--- a/avatica/core/src/test/java/org/apache/calcite/avatica/remote/ProtobufServiceTest.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * 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.
- */
-package org.apache.calcite.avatica.remote;
-
-import org.apache.calcite.avatica.proto.Requests;
-
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
-
-/**
- * Test class for ProtobufService.
- */
-public class ProtobufServiceTest {
-
- @Test public void testCastProtobufMessage() {
- final Requests.CommitRequest commitReq =
- Requests.CommitRequest.newBuilder().setConnectionId("cnxn1").build();
- final Requests.RollbackRequest rollbackReq =
- Requests.RollbackRequest.newBuilder().setConnectionId("cnxn1").build();
-
- assertEquals(commitReq,
- ProtobufService.castProtobufMessage(commitReq, Requests.CommitRequest.class));
- assertEquals(rollbackReq,
- ProtobufService.castProtobufMessage(rollbackReq, Requests.RollbackRequest.class));
-
- try {
- ProtobufService.castProtobufMessage(commitReq, Requests.RollbackRequest.class);
- fail("Should have seen IllegalArgumentException casting CommitRequest into RollbackRequest");
- } catch (IllegalArgumentException e) {
- // Expected
- }
-
- try {
- ProtobufService.castProtobufMessage(rollbackReq, Requests.CommitRequest.class);
- fail("Should have seen IllegalArgumentException casting RollbackRequest into CommitRequest");
- } catch (IllegalArgumentException e) {
- // Expected
- }
- }
-}
-
-// End ProtobufServiceTest.java
http://git-wip-us.apache.org/repos/asf/calcite-avatica/blob/fc7b26c8/avatica/core/src/test/java/org/apache/calcite/avatica/remote/ProtobufTranslationImplTest.java
----------------------------------------------------------------------
diff --git a/avatica/core/src/test/java/org/apache/calcite/avatica/remote/ProtobufTranslationImplTest.java b/avatica/core/src/test/java/org/apache/calcite/avatica/remote/ProtobufTranslationImplTest.java
deleted file mode 100644
index ebb2df4..0000000
--- a/avatica/core/src/test/java/org/apache/calcite/avatica/remote/ProtobufTranslationImplTest.java
+++ /dev/null
@@ -1,387 +0,0 @@
-/*
- * 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.
- */
-package org.apache.calcite.avatica.remote;
-
-import org.apache.calcite.avatica.AvaticaParameter;
-import org.apache.calcite.avatica.AvaticaSeverity;
-import org.apache.calcite.avatica.ColumnMetaData;
-import org.apache.calcite.avatica.ColumnMetaData.ArrayType;
-import org.apache.calcite.avatica.ColumnMetaData.Rep;
-import org.apache.calcite.avatica.ColumnMetaData.ScalarType;
-import org.apache.calcite.avatica.ConnectionPropertiesImpl;
-import org.apache.calcite.avatica.Meta;
-import org.apache.calcite.avatica.Meta.Frame;
-import org.apache.calcite.avatica.Meta.Signature;
-import org.apache.calcite.avatica.Meta.Style;
-import org.apache.calcite.avatica.MetaImpl;
-import org.apache.calcite.avatica.QueryState;
-import org.apache.calcite.avatica.remote.Service.CatalogsRequest;
-import org.apache.calcite.avatica.remote.Service.CloseConnectionRequest;
-import org.apache.calcite.avatica.remote.Service.CloseConnectionResponse;
-import org.apache.calcite.avatica.remote.Service.CloseStatementRequest;
-import org.apache.calcite.avatica.remote.Service.CloseStatementResponse;
-import org.apache.calcite.avatica.remote.Service.ColumnsRequest;
-import org.apache.calcite.avatica.remote.Service.CommitRequest;
-import org.apache.calcite.avatica.remote.Service.CommitResponse;
-import org.apache.calcite.avatica.remote.Service.ConnectionSyncRequest;
-import org.apache.calcite.avatica.remote.Service.ConnectionSyncResponse;
-import org.apache.calcite.avatica.remote.Service.CreateStatementRequest;
-import org.apache.calcite.avatica.remote.Service.CreateStatementResponse;
-import org.apache.calcite.avatica.remote.Service.DatabasePropertyRequest;
-import org.apache.calcite.avatica.remote.Service.DatabasePropertyResponse;
-import org.apache.calcite.avatica.remote.Service.ErrorResponse;
-import org.apache.calcite.avatica.remote.Service.ExecuteBatchResponse;
-import org.apache.calcite.avatica.remote.Service.ExecuteResponse;
-import org.apache.calcite.avatica.remote.Service.FetchRequest;
-import org.apache.calcite.avatica.remote.Service.FetchResponse;
-import org.apache.calcite.avatica.remote.Service.OpenConnectionRequest;
-import org.apache.calcite.avatica.remote.Service.OpenConnectionResponse;
-import org.apache.calcite.avatica.remote.Service.PrepareAndExecuteBatchRequest;
-import org.apache.calcite.avatica.remote.Service.PrepareAndExecuteRequest;
-import org.apache.calcite.avatica.remote.Service.PrepareRequest;
-import org.apache.calcite.avatica.remote.Service.PrepareResponse;
-import org.apache.calcite.avatica.remote.Service.Request;
-import org.apache.calcite.avatica.remote.Service.Response;
-import org.apache.calcite.avatica.remote.Service.ResultSetResponse;
-import org.apache.calcite.avatica.remote.Service.RollbackRequest;
-import org.apache.calcite.avatica.remote.Service.RollbackResponse;
-import org.apache.calcite.avatica.remote.Service.RpcMetadataResponse;
-import org.apache.calcite.avatica.remote.Service.SchemasRequest;
-import org.apache.calcite.avatica.remote.Service.SyncResultsRequest;
-import org.apache.calcite.avatica.remote.Service.SyncResultsResponse;
-import org.apache.calcite.avatica.remote.Service.TableTypesRequest;
-import org.apache.calcite.avatica.remote.Service.TablesRequest;
-import org.apache.calcite.avatica.remote.Service.TypeInfoRequest;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameters;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.sql.DatabaseMetaData;
-import java.sql.Types;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-
-import static org.junit.Assert.assertEquals;
-
-/**
- * Tests serialization of requests and response objects.
- *
- * @param <T> The object class being tested
- */
-@RunWith(Parameterized.class)
-public class ProtobufTranslationImplTest<T> {
-
- /**
- * Simple function definition that acts as an identity.
- *
- * @param <A> Argument type
- */
- private interface IdentityFunction<A> {
- A apply(A obj) throws IOException;
- }
-
- /**
- * Identity function that accepts a request, serializes it to protobuf, and converts it back.
- */
- private static class RequestFunc implements IdentityFunction<Request> {
- private final ProtobufTranslation translation;
-
- public RequestFunc(ProtobufTranslation translation) {
- this.translation = translation;
- }
-
- public Request apply(Request request) throws IOException {
- // Serialize and then re-parse the request
- return translation.parseRequest(translation.serializeRequest(request));
- }
- }
-
- /**
- * Identity function that accepts a response, serializes it to protobuf, and converts it back.
- */
- private static class ResponseFunc implements IdentityFunction<Response> {
- private final ProtobufTranslation translation;
-
- public ResponseFunc(ProtobufTranslation translation) {
- this.translation = translation;
- }
-
- public Response apply(Response response) throws IOException {
- // Serialize and then re-pare the response
- return translation.parseResponse(translation.serializeResponse(response));
- }
- }
-
- @Parameters
- public static List<Object[]> parameters() {
- List<Object[]> params = new ArrayList<>();
-
- // The impl we're testing
- ProtobufTranslationImpl translation = new ProtobufTranslationImpl();
-
- // Identity transformation for Requests
- RequestFunc requestFunc = new RequestFunc(translation);
- // Identity transformation for Responses
- ResponseFunc responseFunc = new ResponseFunc(translation);
-
- List<Request> requests = getRequests();
- List<Request> requestsWithNulls = getRequestsWithNulls();
- List<Response> responses = getResponses();
-
- // Requests
- for (Request request : requests) {
- params.add(new Object[] {request, requestFunc});
- }
-
- // Requests with nulls in parameters
- for (Request request : requestsWithNulls) {
- params.add(new Object[] {request, requestFunc});
- }
-
- // Responses
- for (Response response : responses) {
- params.add(new Object[] {response, responseFunc});
- }
-
- return params;
- }
-
- /**
- * Generates a collection of Requests whose serialization will be tested.
- */
- private static List<Request> getRequests() {
- LinkedList<Request> requests = new LinkedList<>();
-
- requests.add(new CatalogsRequest());
- requests.add(new DatabasePropertyRequest());
- requests.add(new SchemasRequest("connectionId", "catalog", "schemaPattern"));
- requests.add(
- new TablesRequest("connectionId", "catalog", "schemaPattern", "tableNamePattern",
- Arrays.asList("STRING", "BOOLEAN", "INT")));
- requests.add(new TableTypesRequest());
- requests.add(
- new ColumnsRequest("connectionId", "catalog", "schemaPattern", "tableNamePattern",
- "columnNamePattern"));
- requests.add(new TypeInfoRequest());
- requests.add(
- new PrepareAndExecuteRequest("connectionId", Integer.MAX_VALUE, "sql",
- Long.MAX_VALUE));
- requests.add(new PrepareRequest("connectionId", "sql", Long.MAX_VALUE));
-
- List<TypedValue> paramValues =
- Arrays.asList(TypedValue.create(Rep.BOOLEAN.name(), Boolean.TRUE),
- TypedValue.create(Rep.STRING.name(), "string"));
- FetchRequest fetchRequest = new FetchRequest("connectionId", Integer.MAX_VALUE,
- Long.MAX_VALUE, Integer.MAX_VALUE);
- requests.add(fetchRequest);
-
- requests.add(new CreateStatementRequest("connectionId"));
- requests.add(new CloseStatementRequest("connectionId", Integer.MAX_VALUE));
- Map<String, String> info = new HashMap<>();
- info.put("param1", "value1");
- info.put("param2", "value2");
- requests.add(new OpenConnectionRequest("connectionId", info));
- requests.add(new CloseConnectionRequest("connectionId"));
- requests.add(
- new ConnectionSyncRequest("connectionId",
- new ConnectionPropertiesImpl(Boolean.FALSE, Boolean.FALSE,
- Integer.MAX_VALUE, "catalog", "schema")));
-
- requests.add(new SyncResultsRequest("connectionId", 12345, getSqlQueryState(), 150));
- requests.add(new SyncResultsRequest("connectionId2", 54321, getMetadataQueryState1(), 0));
- requests.add(new SyncResultsRequest("connectionId3", 5, getMetadataQueryState2(), 10));
-
- requests.add(new CommitRequest("connectionId"));
- requests.add(new RollbackRequest("connectionId"));
-
- // ExecuteBatchRequest omitted because of the special protobuf conversion it does
-
- List<String> commands = Arrays.asList("command1", "command2", "command3");
- requests.add(new PrepareAndExecuteBatchRequest("connectionId", 12345, commands));
-
- return requests;
- }
-
- private static QueryState getSqlQueryState() {
- return new QueryState("SELECT * from TABLE");
- }
-
- private static QueryState getMetadataQueryState1() {
- return new QueryState(MetaDataOperation.GET_COLUMNS, new Object[] {
- "",
- null,
- "%",
- "%"
- });
- }
-
- private static QueryState getMetadataQueryState2() {
- return new QueryState(MetaDataOperation.GET_CATALOGS, new Object[0]);
- }
-
- private static List<Request> getRequestsWithNulls() {
- LinkedList<Request> requests = new LinkedList<>();
-
- // We're pretty fast and loose on what can be null.
- requests.add(new SchemasRequest(null, null, null));
- // Repeated fields default to an empty list
- requests.add(new TablesRequest(null, null, null, null, Collections.<String>emptyList()));
- requests.add(new ColumnsRequest(null, null, null, null, null));
- requests.add(new PrepareAndExecuteRequest(null, 0, null, 0));
- requests.add(new PrepareRequest(null, null, 0));
- requests.add(new CreateStatementRequest(null));
- requests.add(new CloseStatementRequest(null, 0));
- requests.add(new OpenConnectionRequest(null, null));
- requests.add(new CloseConnectionRequest(null));
- requests.add(new ConnectionSyncRequest(null, null));
-
- return requests;
- }
-
- private static ColumnMetaData getArrayColumnMetaData(ScalarType componentType, int index,
- String name) {
- ArrayType arrayType = ColumnMetaData.array(componentType, "Array", Rep.ARRAY);
- return new ColumnMetaData(
- index, false, true, false, false, DatabaseMetaData.columnNullable,
- true, -1, name, name, null,
- 0, 0, null, null, arrayType, true, false, false,
- "ARRAY");
- }
-
- /**
- * Generates a collection of Responses whose serialization will be tested.
- */
- private static List<Response> getResponses() {
- final RpcMetadataResponse rpcMetadata = new RpcMetadataResponse("localhost:8765");
- LinkedList<Response> responses = new LinkedList<>();
-
- // Nested classes (Signature, ColumnMetaData, CursorFactory, etc) are implicitly getting tested)
-
- // Stub out the metadata for a row
- ScalarType arrayComponentType = ColumnMetaData.scalar(Types.INTEGER, "integer", Rep.INTEGER);
- ColumnMetaData arrayColumnMetaData = getArrayColumnMetaData(arrayComponentType, 2, "counts");
- List<ColumnMetaData> columns =
- Arrays.asList(MetaImpl.columnMetaData("str", 0, String.class, true),
- MetaImpl.columnMetaData("count", 1, Integer.class, true),
- arrayColumnMetaData);
- List<AvaticaParameter> params =
- Arrays.asList(
- new AvaticaParameter(false, 10, 0, Types.VARCHAR, "VARCHAR",
- String.class.getName(), "str"));
- Meta.CursorFactory cursorFactory = Meta.CursorFactory.create(Style.LIST, Object.class,
- Arrays.asList("str", "count", "counts"));
- // The row values
- List<Object> rows = new ArrayList<>();
- rows.add(new Object[] {"str_value1", 50, Arrays.asList(1, 2, 3)});
- rows.add(new Object[] {"str_value2", 100, Arrays.asList(1)});
-
- // Create the signature and frame using the metadata and values
- Signature signature = Signature.create(columns, "sql", params, cursorFactory,
- Meta.StatementType.SELECT);
- Frame frame = Frame.create(Integer.MAX_VALUE, true, rows);
-
- // And then create a ResultSetResponse
- ResultSetResponse results1 = new ResultSetResponse("connectionId", Integer.MAX_VALUE, true,
- signature, frame, Long.MAX_VALUE, rpcMetadata);
- responses.add(results1);
-
- responses.add(new CloseStatementResponse(rpcMetadata));
-
- ConnectionPropertiesImpl connProps = new ConnectionPropertiesImpl(false, true,
- Integer.MAX_VALUE, "catalog", "schema");
- responses.add(new ConnectionSyncResponse(connProps, rpcMetadata));
-
- responses.add(new OpenConnectionResponse(rpcMetadata));
- responses.add(new CloseConnectionResponse(rpcMetadata));
-
- responses.add(new CreateStatementResponse("connectionId", Integer.MAX_VALUE, rpcMetadata));
-
- Map<Meta.DatabaseProperty, Object> propertyMap = new HashMap<>();
- for (Meta.DatabaseProperty prop : Meta.DatabaseProperty.values()) {
- propertyMap.put(prop, prop.defaultValue);
- }
- responses.add(new DatabasePropertyResponse(propertyMap, rpcMetadata));
-
- responses.add(
- new ExecuteResponse(Arrays.asList(results1, results1, results1), false, rpcMetadata));
- responses.add(new FetchResponse(frame, false, false, rpcMetadata));
- responses.add(new FetchResponse(frame, true, true, rpcMetadata));
- responses.add(new FetchResponse(frame, false, true, rpcMetadata));
- responses.add(
- new PrepareResponse(
- new Meta.StatementHandle("connectionId", Integer.MAX_VALUE, signature),
- rpcMetadata));
-
- StringWriter sw = new StringWriter();
- new Exception().printStackTrace(new PrintWriter(sw));
- responses.add(
- new ErrorResponse(Collections.singletonList(sw.toString()), "Test Error Message",
- ErrorResponse.UNKNOWN_ERROR_CODE, ErrorResponse.UNKNOWN_SQL_STATE,
- AvaticaSeverity.WARNING, rpcMetadata));
-
- // No more results, statement not missing
- responses.add(new SyncResultsResponse(false, false, rpcMetadata));
- // Missing statement, no results
- responses.add(new SyncResultsResponse(false, true, rpcMetadata));
- // More results, no missing statement
- responses.add(new SyncResultsResponse(true, false, rpcMetadata));
-
- // Some tests to make sure ErrorResponse doesn't fail.
- responses.add(new ErrorResponse((List<String>) null, null, 0, null, null, null));
- responses.add(
- new ErrorResponse(Arrays.asList("stacktrace1", "stacktrace2"), null, 0, null, null, null));
-
- responses.add(new CommitResponse());
- responses.add(new RollbackResponse());
-
- long[] updateCounts = new long[]{1, 0, 1, 1};
- responses.add(
- new ExecuteBatchResponse("connectionId", 12345, updateCounts, false, rpcMetadata));
-
- return responses;
- }
-
- private final T object;
- private final IdentityFunction<T> function;
-
- public ProtobufTranslationImplTest(T object, IdentityFunction<T> func) {
- this.object = object;
- this.function = func;
- }
-
- @Test
- public void testSerialization() throws Exception {
- // Function acts as opposite sides of the transport.
- // An object (a request or response) starts on one side
- // of the transport, serialized, "sent" over the transport
- // and then reconstituted. The object on either side should
- // be equivalent.
- assertEquals(object, this.function.apply(object));
- }
-}
-
-// End ProtobufTranslationImplTest.java
http://git-wip-us.apache.org/repos/asf/calcite-avatica/blob/fc7b26c8/avatica/core/src/test/java/org/apache/calcite/avatica/remote/TypedValueTest.java
----------------------------------------------------------------------
diff --git a/avatica/core/src/test/java/org/apache/calcite/avatica/remote/TypedValueTest.java b/avatica/core/src/test/java/org/apache/calcite/avatica/remote/TypedValueTest.java
deleted file mode 100644
index 7606a87..0000000
--- a/avatica/core/src/test/java/org/apache/calcite/avatica/remote/TypedValueTest.java
+++ /dev/null
@@ -1,208 +0,0 @@
-/*
- * 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.
- */
-package org.apache.calcite.avatica.remote;
-
-import org.apache.calcite.avatica.ColumnMetaData.Rep;
-import org.apache.calcite.avatica.proto.Common;
-import org.apache.calcite.avatica.util.Base64;
-import org.apache.calcite.avatica.util.ByteString;
-import org.apache.calcite.avatica.util.DateTimeUtils;
-
-import org.junit.Test;
-
-import java.math.BigDecimal;
-import java.util.Calendar;
-
-import static org.hamcrest.CoreMatchers.instanceOf;
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertThat;
-
-import static java.nio.charset.StandardCharsets.UTF_8;
-
-/**
- * Test serialization of TypedValue.
- */
-public class TypedValueTest {
-
- private void serializeAndEqualityCheck(TypedValue value) {
- TypedValue copy = TypedValue.fromProto(value.toProto());
-
- assertEquals(value.type, copy.type);
- assertEquals(value.value, copy.value);
- }
-
- @Test public void testBoolean() {
- serializeAndEqualityCheck(TypedValue.ofLocal(Rep.PRIMITIVE_BOOLEAN, true));
- serializeAndEqualityCheck(TypedValue.ofLocal(Rep.BOOLEAN, Boolean.TRUE));
- }
-
- @Test public void testByte() {
- serializeAndEqualityCheck(TypedValue.ofLocal(Rep.PRIMITIVE_BYTE, (byte) 4));
- serializeAndEqualityCheck(TypedValue.ofLocal(Rep.BYTE, Byte.valueOf((byte) 4)));
- }
-
- @Test public void testShort() {
- serializeAndEqualityCheck(TypedValue.ofLocal(Rep.PRIMITIVE_SHORT, (short) 42));
- serializeAndEqualityCheck(TypedValue.ofLocal(Rep.SHORT, Short.valueOf((short) 42)));
- }
-
- @Test public void testInteger() {
- serializeAndEqualityCheck(TypedValue.ofLocal(Rep.PRIMITIVE_INT, (int) 42000));
- serializeAndEqualityCheck(TypedValue.ofLocal(Rep.INTEGER, Integer.valueOf((int) 42000)));
- }
-
- @Test public void testLong() {
- serializeAndEqualityCheck(TypedValue.ofLocal(Rep.PRIMITIVE_LONG, Long.MAX_VALUE));
- serializeAndEqualityCheck(TypedValue.ofLocal(Rep.LONG, Long.valueOf(Long.MAX_VALUE)));
- }
-
- @Test public void testFloat() {
- serializeAndEqualityCheck(TypedValue.ofLocal(Rep.PRIMITIVE_FLOAT, 3.14159f));
- serializeAndEqualityCheck(TypedValue.ofLocal(Rep.FLOAT, Float.valueOf(3.14159f)));
- }
-
- @Test public void testDouble() {
- serializeAndEqualityCheck(TypedValue.ofLocal(Rep.PRIMITIVE_DOUBLE, Double.MAX_VALUE));
- serializeAndEqualityCheck(TypedValue.ofLocal(Rep.DOUBLE, Double.valueOf(Double.MAX_VALUE)));
- }
-
- @Test public void testDecimal() {
- final BigDecimal decimal = new BigDecimal("1.2345");
- final TypedValue decimalTypedValue = TypedValue.ofLocal(Rep.NUMBER, decimal);
- serializeAndEqualityCheck(decimalTypedValue);
-
- final Common.TypedValue protoTypedValue = decimalTypedValue.toProto();
- assertEquals(Common.Rep.BIG_DECIMAL, protoTypedValue.getType());
- final String strValue = protoTypedValue.getStringValue();
- assertNotNull(strValue);
- assertEquals(decimal.toPlainString(), strValue);
- }
-
- @Test public void testChar() {
- serializeAndEqualityCheck(TypedValue.ofLocal(Rep.PRIMITIVE_CHAR, 'c'));
- serializeAndEqualityCheck(TypedValue.ofLocal(Rep.CHARACTER, Character.valueOf('c')));
- }
-
- @Test public void testString() {
- serializeAndEqualityCheck(TypedValue.ofLocal(Rep.STRING, "qwertyasdf"));
- }
-
- @Test public void testByteString() {
- serializeAndEqualityCheck(
- TypedValue.ofLocal(Rep.BYTE_STRING,
- new ByteString("qwertyasdf".getBytes(UTF_8))));
- }
-
- @Test public void testBase64() {
- byte[] bytes = "qwertyasdf".getBytes(UTF_8);
- // Plain bytes get put into protobuf for simplicitly
- Common.TypedValue proto = Common.TypedValue.newBuilder().setBytesValue(
- com.google.protobuf.ByteString.copyFrom(bytes))
- .setType(Common.Rep.BYTE_STRING).build();
-
- // But we should get back a b64-string to make sure TypedValue doesn't get confused.
- Object deserializedObj = TypedValue.getSerialFromProto(proto);
- assertThat(deserializedObj, is(instanceOf(String.class)));
- assertEquals(new ByteString(bytes).toBase64String(), (String) deserializedObj);
-
- // But we should get a non-b64 byte array as the JDBC representation
- deserializedObj =
- TypedValue.protoToJdbc(proto, DateTimeUtils.calendar());
- assertThat(deserializedObj, is(instanceOf(byte[].class)));
- assertArrayEquals(bytes, (byte[]) deserializedObj);
- }
-
- @Test public void testSqlDate() {
- // days since epoch
- serializeAndEqualityCheck(TypedValue.ofLocal(Rep.JAVA_SQL_DATE, 25));
- }
-
- @Test public void testUtilDate() {
- serializeAndEqualityCheck(
- TypedValue.ofLocal(Rep.JAVA_UTIL_DATE, System.currentTimeMillis()));
- }
-
- @Test public void testSqlTime() {
- // millis since epoch
- serializeAndEqualityCheck(
- TypedValue.ofLocal(Rep.JAVA_SQL_TIME, 42 * 1024 * 1024));
- }
-
- @Test public void testSqlTimestamp() {
- serializeAndEqualityCheck(
- TypedValue.ofLocal(Rep.JAVA_SQL_TIMESTAMP, 42L * 1024 * 1024 * 1024));
- }
-
- @Test public void testLegacyDecimalParsing() {
- final BigDecimal decimal = new BigDecimal("123451234512345");
- final Calendar calendar = DateTimeUtils.calendar();
-
- // CALCITE-1103 Decimals were (incorrectly) getting serialized as normal "numbers" which
- // caused them to use the numberValue field. TypedValue should still be able to handle
- // values like this (but large values will be truncated and return bad values).
- Common.TypedValue oldProtoStyle = Common.TypedValue.newBuilder().setType(Common.Rep.NUMBER)
- .setNumberValue(decimal.longValue()).build();
-
- TypedValue fromProtoTv = TypedValue.fromProto(oldProtoStyle);
- Object o = fromProtoTv.toJdbc(calendar);
- assertEquals(decimal, o);
- }
-
- @Test public void testProtobufBytesNotSentAsBase64() {
- final byte[] bytes = "asdf".getBytes(UTF_8);
- final byte[] b64Bytes = Base64.encodeBytes(bytes).getBytes(UTF_8);
- TypedValue tv = TypedValue.ofLocal(Rep.BYTE_STRING, new ByteString(bytes));
- // JSON encodes it as base64
- assertEquals(new String(b64Bytes, UTF_8), tv.value);
-
- // Get the protobuf variant
- Common.TypedValue protoTv = tv.toProto();
- Common.Rep protoRep = protoTv.getType();
- assertEquals(Common.Rep.BYTE_STRING, protoRep);
-
- // The pb variant should have the native bytes of the original value
- com.google.protobuf.ByteString protoByteString = protoTv.getBytesValue();
- assertNotNull(protoByteString);
- assertArrayEquals(bytes, protoByteString.toByteArray());
-
- // We should have the b64 string as a backwards compatibility feature
- assertEquals(new String(b64Bytes, UTF_8),
- protoTv.getStringValue());
- }
-
- @Test public void testLegacyBase64StringEncodingForBytes() {
- // CALCITE-1103 CALCITE-1209 We observed that binary data was being
- // serialized as base-64 encoded strings instead of the native binary
- // data type in protobufs. We need to still handle older clients sending
- // data in this form.
- final byte[] bytes = "asdf".getBytes(UTF_8);
- final String base64Str = Base64.encodeBytes(bytes);
- Common.TypedValue.Builder builder = Common.TypedValue.newBuilder();
- builder.setStringValue(base64Str);
- builder.setType(Common.Rep.BYTE_STRING);
- Common.TypedValue protoTv = builder.build();
-
- TypedValue tv = TypedValue.fromProto(protoTv);
- assertEquals(Rep.BYTE_STRING, tv.type);
- assertEquals(base64Str, tv.value);
- }
-}
-
-// End TypedValueTest.java
http://git-wip-us.apache.org/repos/asf/calcite-avatica/blob/fc7b26c8/avatica/core/src/test/java/org/apache/calcite/avatica/test/AvaticaClientRuntimeExceptionTest.java
----------------------------------------------------------------------
diff --git a/avatica/core/src/test/java/org/apache/calcite/avatica/test/AvaticaClientRuntimeExceptionTest.java b/avatica/core/src/test/java/org/apache/calcite/avatica/test/AvaticaClientRuntimeExceptionTest.java
deleted file mode 100644
index 411f29c..0000000
--- a/avatica/core/src/test/java/org/apache/calcite/avatica/test/AvaticaClientRuntimeExceptionTest.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * 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.
- */
-package org.apache.calcite.avatica.test;
-
-import org.apache.calcite.avatica.AvaticaClientRuntimeException;
-import org.apache.calcite.avatica.AvaticaSeverity;
-import org.apache.calcite.avatica.remote.Service.RpcMetadataResponse;
-
-import org.junit.Test;
-
-import java.util.Arrays;
-import java.util.List;
-
-import static org.junit.Assert.assertEquals;
-
-/**
- * Test class for {@link AvaticaClientRuntimeException}.
- */
-public class AvaticaClientRuntimeExceptionTest {
-
- @Test public void testGetters() {
- final String errorMsg = "My error message";
- final int errorCode = 10;
- final String sqlState = "abc12";
- final AvaticaSeverity severity = AvaticaSeverity.ERROR;
- final List<String> stacktraces = Arrays.asList("my stack trace");
- final RpcMetadataResponse metadata = new RpcMetadataResponse("localhost:8765");
- AvaticaClientRuntimeException e = new AvaticaClientRuntimeException(errorMsg, errorCode,
- sqlState, severity, stacktraces, metadata);
- assertEquals(errorMsg, e.getMessage());
- assertEquals(errorCode, e.getErrorCode());
- assertEquals(severity, e.getSeverity());
- assertEquals(stacktraces, e.getServerExceptions());
- assertEquals(metadata, e.getRpcMetadata());
- }
-
-}
-
-// End AvaticaClientRuntimeExceptionTest.java
http://git-wip-us.apache.org/repos/asf/calcite-avatica/blob/fc7b26c8/avatica/core/src/test/java/org/apache/calcite/avatica/test/AvaticaSeverityTest.java
----------------------------------------------------------------------
diff --git a/avatica/core/src/test/java/org/apache/calcite/avatica/test/AvaticaSeverityTest.java b/avatica/core/src/test/java/org/apache/calcite/avatica/test/AvaticaSeverityTest.java
deleted file mode 100644
index 945f959..0000000
--- a/avatica/core/src/test/java/org/apache/calcite/avatica/test/AvaticaSeverityTest.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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.
- */
-package org.apache.calcite.avatica.test;
-
-import org.apache.calcite.avatica.AvaticaSeverity;
-
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-
-/**
- * Tests for {@link AvaticaSeverity}.
- */
-public class AvaticaSeverityTest {
-
- @Test
- public void testProtobufSerialization() {
- for (AvaticaSeverity severity : AvaticaSeverity.values()) {
- assertEquals(severity, AvaticaSeverity.fromProto(severity.toProto()));
- }
- }
-
-}
-
-// End AvaticaSeverityTest.java
http://git-wip-us.apache.org/repos/asf/calcite-avatica/blob/fc7b26c8/avatica/core/src/test/java/org/apache/calcite/avatica/test/AvaticaSqlExceptionTest.java
----------------------------------------------------------------------
diff --git a/avatica/core/src/test/java/org/apache/calcite/avatica/test/AvaticaSqlExceptionTest.java b/avatica/core/src/test/java/org/apache/calcite/avatica/test/AvaticaSqlExceptionTest.java
deleted file mode 100644
index 3d7b5b0..0000000
--- a/avatica/core/src/test/java/org/apache/calcite/avatica/test/AvaticaSqlExceptionTest.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * 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.
- */
-package org.apache.calcite.avatica.test;
-
-import org.apache.calcite.avatica.AvaticaSqlException;
-
-import org.junit.Test;
-
-import java.util.Arrays;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-/**
- * Tests for {@link AvaticaSqlException}.
- */
-public class AvaticaSqlExceptionTest {
-
- @Test public void testGetters() {
- final String msg = "My query failed!";
- final int code = 42;
- final String sql = "SELECT foo FROM bar;";
- final String stacktrace = "My Stack Trace";
- final String server = "localhost:8765";
-
- AvaticaSqlException e = new AvaticaSqlException(msg, sql, code, Arrays.asList(stacktrace),
- server);
- assertTrue(e.getMessage().contains(msg));
- assertEquals(code, e.getErrorCode());
- assertEquals(sql, e.getSQLState());
- assertEquals(1, e.getStackTraces().size());
- assertEquals(stacktrace, e.getStackTraces().get(0));
- assertEquals(server, e.getRemoteServer());
- }
-
-}
-
-// End AvaticaSqlExceptionTest.java
http://git-wip-us.apache.org/repos/asf/calcite-avatica/blob/fc7b26c8/avatica/core/src/test/java/org/apache/calcite/avatica/test/AvaticaUtilsTest.java
----------------------------------------------------------------------
diff --git a/avatica/core/src/test/java/org/apache/calcite/avatica/test/AvaticaUtilsTest.java b/avatica/core/src/test/java/org/apache/calcite/avatica/test/AvaticaUtilsTest.java
deleted file mode 100644
index b1a422c..0000000
--- a/avatica/core/src/test/java/org/apache/calcite/avatica/test/AvaticaUtilsTest.java
+++ /dev/null
@@ -1,340 +0,0 @@
-/*
- * 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.
- */
-package org.apache.calcite.avatica.test;
-
-import org.apache.calcite.avatica.AvaticaUtils;
-import org.apache.calcite.avatica.ConnectionConfigImpl;
-import org.apache.calcite.avatica.ConnectionProperty;
-import org.apache.calcite.avatica.util.ByteString;
-
-import org.junit.Test;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.LinkedHashSet;
-import java.util.Locale;
-import java.util.Properties;
-import java.util.Set;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.nullValue;
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.fail;
-
-/**
- * Unit test for Avatica utilities.
- */
-public class AvaticaUtilsTest {
- @Test public void testInstantiatePlugin() {
- final String s =
- AvaticaUtils.instantiatePlugin(String.class, "java.lang.String");
- assertThat(s, is(""));
-
- // No default constructor or INSTANCE member
- try {
- final Integer i =
- AvaticaUtils.instantiatePlugin(Integer.class, "java.lang.Integer");
- fail("expected error, got " + i);
- } catch (Throwable e) {
- assertThat(e.getMessage(),
- is("Property 'java.lang.Integer' not valid for plugin type java.lang.Integer"));
- }
-
- final BigInteger b =
- AvaticaUtils.instantiatePlugin(BigInteger.class, "java.math.BigInteger#ONE");
- assertThat(b, is(BigInteger.ONE));
-
- try {
- final BigInteger b2 =
- AvaticaUtils.instantiatePlugin(BigInteger.class,
- "java.math.BigInteger.ONE");
- fail("expected error, got " + b2);
- } catch (Throwable e) {
- assertThat(e.getMessage(),
- is("Property 'java.math.BigInteger.ONE' not valid for plugin type java.math.BigInteger"));
- }
- }
-
- /** Unit test for
- * {@link org.apache.calcite.avatica.AvaticaUtils#unique(java.lang.String)}. */
- @Test public void testUnique() {
- // Below, the "probably" comments indicate the strings that will be
- // generated the first time you run the test.
- final Set<String> list = new LinkedHashSet<>();
- list.add(AvaticaUtils.unique("a")); // probably "a"
- assertThat(list.size(), is(1));
- list.add(AvaticaUtils.unique("a")); // probably "a_1"
- assertThat(list.size(), is(2));
- list.add(AvaticaUtils.unique("b")); // probably "b"
- assertThat(list.size(), is(3));
- list.add(AvaticaUtils.unique("a_1")); // probably "a_1_3"
- assertThat(list.size(), is(4));
- list.add(AvaticaUtils.unique("A")); // probably "A"
- assertThat(list.size(), is(5));
- list.add(AvaticaUtils.unique("a")); // probably "a_5"
- assertThat(list.size(), is(6));
- }
-
- /** Tests connect string properties. */
- @Test public void testConnectionProperty() {
- final ConnectionPropertyImpl n = new ConnectionPropertyImpl("N",
- BigDecimal.valueOf(100), ConnectionProperty.Type.NUMBER);
-
- final Properties properties = new Properties();
- ConnectionConfigImpl.PropEnv env = n.wrap(properties);
- assertThat(env.getInt(), is(100));
- assertThat(env.getInt(-45), is(-45));
- properties.setProperty(n.name, "123");
- assertThat(env.getInt(), is(100));
- env = n.wrap(properties);
- assertThat(env.getInt(), is(123));
- assertThat(env.getInt(-45), is(123));
-
- properties.setProperty(n.name, "10k");
- env = n.wrap(properties);
- assertThat(env.getInt(), is(10 * 1024));
-
- properties.setProperty(n.name, "-0.5k");
- env = n.wrap(properties);
- assertThat(env.getInt(), is(-512));
-
- properties.setProperty(n.name, "10m");
- env = n.wrap(properties);
- assertThat(env.getInt(), is(10 * 1024 * 1024));
- assertThat(env.getLong(), is(10L * 1024 * 1024));
- assertThat(env.getDouble(), is(10D * 1024 * 1024));
-
- properties.setProperty(n.name, "-2M");
- env = n.wrap(properties);
- assertThat(env.getInt(), is(-2 * 1024 * 1024));
-
- properties.setProperty(n.name, "10g");
- env = n.wrap(properties);
- assertThat(env.getLong(), is(10L * 1024 * 1024 * 1024));
-
- final ConnectionPropertyImpl b = new ConnectionPropertyImpl("B",
- true, ConnectionProperty.Type.BOOLEAN);
-
- env = b.wrap(properties);
- assertThat(env.getBoolean(), is(true));
- assertThat(env.getBoolean(true), is(true));
- assertThat(env.getBoolean(false), is(false));
-
- properties.setProperty(b.name, "false");
- env = b.wrap(properties);
- assertThat(env.getBoolean(), is(false));
-
- final ConnectionPropertyImpl s = new ConnectionPropertyImpl("S",
- "foo", ConnectionProperty.Type.STRING);
-
- env = s.wrap(properties);
- assertThat(env.getString(), is("foo"));
- assertThat(env.getString("baz"), is("baz"));
-
- properties.setProperty(s.name, " ");
- env = s.wrap(properties);
- assertThat(env.getString(), is(" "));
-
- try {
- final ConnectionPropertyImpl t =
- new ConnectionPropertyImpl("T", null, ConnectionProperty.Type.ENUM);
- fail("should throw if you specify an enum property without a class, got "
- + t);
- } catch (AssertionError e) {
- assertThat(e.getMessage(), is("must specify value class for an ENUM"));
- // ok
- }
-
- // An enum with a default value
- final ConnectionPropertyImpl t = new ConnectionPropertyImpl("T", Size.BIG,
- ConnectionProperty.Type.ENUM, Size.class);
- env = t.wrap(properties);
- assertThat(env.getEnum(Size.class), is(Size.BIG));
- assertThat(env.getEnum(Size.class, Size.SMALL), is(Size.SMALL));
- assertThat(env.getEnum(Size.class, null), nullValue());
- try {
- final Weight envEnum = env.getEnum(Weight.class, null);
- fail("expected error, got " + envEnum);
- } catch (AssertionError e) {
- assertThat(e.getMessage(),
- is("wrong value class; expected " + Size.class));
- }
-
- // An enum with a default value that is an anonymous enum,
- // not specifying value type.
- final ConnectionPropertyImpl v = new ConnectionPropertyImpl("V",
- Size.SMALL, ConnectionProperty.Type.ENUM);
- env = v.wrap(properties);
- assertThat(env.getEnum(Size.class), is(Size.SMALL));
- assertThat(env.getEnum(Size.class, Size.BIG), is(Size.BIG));
- assertThat(env.getEnum(Size.class, null), nullValue());
- try {
- final Weight envEnum = env.getEnum(Weight.class, null);
- fail("expected error, got " + envEnum);
- } catch (AssertionError e) {
- assertThat(e.getMessage(),
- is("wrong value class; expected " + Size.class));
- }
-
- // An enum with no default value
- final ConnectionPropertyImpl u = new ConnectionPropertyImpl("U", null,
- ConnectionProperty.Type.ENUM, Size.class);
- env = u.wrap(properties);
- assertThat(env.getEnum(Size.class), nullValue());
- assertThat(env.getEnum(Size.class, Size.SMALL), is(Size.SMALL));
- assertThat(env.getEnum(Size.class, null), nullValue());
- try {
- final Weight envEnum = env.getEnum(Weight.class, null);
- fail("expected error, got " + envEnum);
- } catch (AssertionError e) {
- assertThat(e.getMessage(),
- is("wrong value class; expected " + Size.class));
- }
- }
-
- @Test public void testLongToIntegerTranslation() {
- long[] longValues = new long[] {Integer.MIN_VALUE, -5, 0, 1, Integer.MAX_VALUE,
- ((long) Integer.MAX_VALUE) + 1L, Long.MAX_VALUE};
- int[] convertedValues = AvaticaUtils.toSaturatedInts(longValues);
- int[] intValues = new int[] {Integer.MIN_VALUE, -5, 0, 1, Integer.MAX_VALUE,
- Integer.MAX_VALUE, Integer.MAX_VALUE};
- assertArrayEquals(convertedValues, intValues);
- }
-
- @Test public void testByteString() {
- final byte[] bytes = {3, 14, 15, 92, 0, 65, 35, 0};
- final ByteString s = new ByteString(bytes);
- final ByteString s2 = new ByteString(bytes.clone());
- final ByteString s3 = new ByteString(new byte[0]);
- final ByteString s4 = new ByteString(new byte[] {0});
- final ByteString s5 = new ByteString(new byte[]{15, 92});
-
- // length
- assertThat(s.length(), is(8));
- assertThat(s3.length(), is(0));
- assertThat(s4.length(), is(1));
-
- // equals and hashCode
- assertThat(s.hashCode(), is(s2.hashCode()));
- assertThat(s.equals(s2), is(true));
- assertThat(s2.equals(s), is(true));
- assertThat(s.equals(s3), is(false));
- assertThat(s3.equals(s), is(false));
-
- // toString
- assertThat(s.toString(), is("030e0f5c00412300"));
- assertThat(s3.toString(), is(""));
- assertThat(s4.toString(), is("00"));
-
- // indexOf
- assertThat(s.indexOf(s3), is(0));
- assertThat(s.indexOf(s3, 5), is(5));
- assertThat(s.indexOf(s3, 15), is(-1));
- assertThat(s.indexOf(s4), is(4));
- assertThat(s.indexOf(s4, 4), is(4));
- assertThat(s.indexOf(s4, 5), is(7));
- assertThat(s.indexOf(s5), is(2));
- assertThat(s.indexOf(s5, 2), is(2));
- assertThat(s.indexOf(s5, 3), is(-1));
- assertThat(s.indexOf(s5, 7), is(-1));
-
- // substring
- assertThat(s.substring(8), is(s3));
- assertThat(s.substring(7), is(s4));
- assertThat(s.substring(0), is(s));
-
- // getBytes
- assertThat(s.getBytes().length, is(8));
- assertThat(Arrays.equals(s.getBytes(), bytes), is(true));
- assertThat(s.getBytes()[3], is((byte) 92));
- final byte[] copyBytes = s.getBytes();
- copyBytes[3] = 11;
- assertThat(s.getBytes()[3], is((byte) 92));
- assertThat(s, is(s2));
- }
-
- /** Dummy implementation of {@link ConnectionProperty}. */
- private static class ConnectionPropertyImpl implements ConnectionProperty {
- private final String name;
- private final Object defaultValue;
- private final Class<?> valueClass;
- private Type type;
-
- ConnectionPropertyImpl(String name, Object defaultValue, Type type) {
- this(name, defaultValue, type, null);
- }
-
- ConnectionPropertyImpl(String name, Object defaultValue, Type type,
- Class valueClass) {
- this.name = name;
- this.defaultValue = defaultValue;
- this.type = type;
- this.valueClass = type.deduceValueClass(defaultValue, valueClass);
- if (!type.valid(defaultValue, this.valueClass)) {
- throw new AssertionError(name);
- }
- }
-
- public String name() {
- return name.toUpperCase(Locale.ROOT);
- }
-
- public String camelName() {
- return name.toLowerCase(Locale.ROOT);
- }
-
- public Object defaultValue() {
- return defaultValue;
- }
-
- public Type type() {
- return type;
- }
-
- public Class valueClass() {
- return valueClass;
- }
-
- public ConnectionConfigImpl.PropEnv wrap(Properties properties) {
- final HashMap<String, ConnectionProperty> map = new HashMap<>();
- map.put(name, this);
- return new ConnectionConfigImpl.PropEnv(
- ConnectionConfigImpl.parse(properties, map), this);
- }
-
- public boolean required() {
- return false;
- }
- }
-
- /** How large? */
- private enum Size {
- BIG,
- SMALL {
- }
- }
-
- /** How heavy? */
- private enum Weight {
- HEAVY, LIGHT
- }
-}
-
-// End AvaticaUtilsTest.java
http://git-wip-us.apache.org/repos/asf/calcite-avatica/blob/fc7b26c8/avatica/core/src/test/java/org/apache/calcite/avatica/test/ConnectStringParserTest.java
----------------------------------------------------------------------
diff --git a/avatica/core/src/test/java/org/apache/calcite/avatica/test/ConnectStringParserTest.java b/avatica/core/src/test/java/org/apache/calcite/avatica/test/ConnectStringParserTest.java
deleted file mode 100644
index cdc8d8a..0000000
--- a/avatica/core/src/test/java/org/apache/calcite/avatica/test/ConnectStringParserTest.java
+++ /dev/null
@@ -1,255 +0,0 @@
-/*
- * 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.
- */
-package org.apache.calcite.avatica.test;
-
-import org.apache.calcite.avatica.ConnectStringParser;
-
-import org.junit.Test;
-
-import java.sql.SQLException;
-import java.util.Properties;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.fail;
-
-/**
- * Unit test for JDBC connect string parser, {@link ConnectStringParser}. The
- * ConnectStringParser is adapted from code in Mondrian, but most of the tests
- * below were unfortunately "reinvented" prior to having the Mondrian unit tests
- * in hand.
- */
-public class ConnectStringParserTest {
- /**
- * Tests simple connect string. Adapted from Mondrian tests.
- */
- @Test public void testSimpleStrings() throws Throwable {
- Properties props = ConnectStringParser.parse("foo=x;bar=y;foo=z");
- assertEquals(
- "bar",
- "y",
- props.get("bar"));
- assertNull(
- "BAR",
- props.get("BAR")); // case-sensitive, unlike Mondrian
- assertEquals(
- "last foo",
- "z",
- props.get("foo"));
- assertNull(
- "key=\" bar\"",
- props.get(" bar"));
- assertNull(
- "bogus key",
- props.get("kipper"));
- assertEquals(
- "param count",
- 2,
- props.size());
-
- String synth = ConnectStringParser.getParamString(props);
- Properties synthProps = ConnectStringParser.parse(synth);
- assertEquals("reversible", props, synthProps);
- }
-
- /**
- * Tests complex connect strings. Adapted directly from Mondrian tests.
- */
- @Test public void testComplexStrings() throws Throwable {
- Properties props =
- ConnectStringParser.parse("normalProp=value;"
- + "emptyValue=;"
- + " spaceBeforeProp=abc;"
- + " spaceBeforeAndAfterProp =def;"
- + " space in prop = foo bar ;"
- + "equalsInValue=foo=bar;"
- + "semiInProp;Name=value;"
- + " singleQuotedValue = 'single quoted value ending in space ' ;"
- + " doubleQuotedValue = "
- + "\"=double quoted value preceded by equals\" ;"
- + " singleQuotedValueWithSemi = 'one; two';"
- + " singleQuotedValueWithSpecials = 'one; two \"three''four=five'");
-
- assertEquals(
- "param count",
- 11,
- props.size());
-
- String value;
- value = (String) props.get("normalProp");
- assertEquals("value", value);
- value = (String) props.get("emptyValue");
- assertEquals("", value); // empty string, not null!
- value = (String) props.get("spaceBeforeProp");
- assertEquals("abc", value);
- value = (String) props.get("spaceBeforeAndAfterProp");
- assertEquals("def", value);
- value = (String) props.get("space in prop");
- assertEquals(value, "foo bar");
- value = (String) props.get("equalsInValue");
- assertEquals("foo=bar", value);
- value = (String) props.get("semiInProp;Name");
- assertEquals("value", value);
- value = (String) props.get("singleQuotedValue");
- assertEquals("single quoted value ending in space ", value);
- value = (String) props.get("doubleQuotedValue");
- assertEquals("=double quoted value preceded by equals", value);
- value = (String) props.get("singleQuotedValueWithSemi");
- assertEquals(value, "one; two");
- value = (String) props.get("singleQuotedValueWithSpecials");
- assertEquals(value, "one; two \"three'four=five");
- }
-
- /**
- * Tests for specific errors thrown by the parser.
- */
- @Test public void testConnectStringErrors() throws Throwable {
- // force some parsing errors
- try {
- ConnectStringParser.parse("key='can't parse'");
- fail("quoted value ended too soon");
- } catch (SQLException e) {
- assertExceptionMatches(e, ".*quoted value ended.*position 9.*");
- }
-
- try {
- ConnectStringParser.parse("key='\"can''t parse\"");
- fail("unterminated quoted value");
- } catch (SQLException e) {
- assertExceptionMatches(e, ".*unterminated quoted value.*");
- }
- }
-
- /**
- * Tests most of the examples from the <a
- * href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/oledb/htm/oledbconnectionstringsyntax.asp">
- * OLE DB spec</a>. Omitted are cases for Window handles, returning multiple
- * values, and special handling of "Provider" keyword.
- */
- @Test public void testOleDbExamples() throws Throwable {
- // test the parser with examples from OLE DB documentation
- Quad[] quads = {
- // {reason for test, key, val, string to parse},
- new Quad(
- "printable chars",
- "Jet OLE DB:System Database", "c:\\system.mda",
- "Jet OLE DB:System Database=c:\\system.mda"),
- new Quad(
- "key embedded semi",
- "Authentication;Info", "Column 5",
- "Authentication;Info=Column 5"),
- new Quad(
- "key embedded equal",
- "Verification=Security", "True",
- "Verification==Security=True"),
- new Quad(
- "key many equals",
- "Many==One", "Valid",
- "Many====One=Valid"),
- new Quad(
- "key too many equal",
- "TooMany=", "False",
- "TooMany===False"),
- new Quad(
- "value embedded quote and semi",
- "ExtProps", "Data Source='localhost';Key Two='value 2'",
- "ExtProps=\"Data Source='localhost';Key Two='value 2'\""),
- new Quad(
- "value embedded double quote and semi",
- "ExtProps", "Integrated Security=\"SSPI\";Key Two=\"value 2\"",
- "ExtProps='Integrated Security=\"SSPI\";Key Two=\"value 2\"'"),
- new Quad(
- "value double quoted",
- "DataSchema", "\"MyCustTable\"",
- "DataSchema='\"MyCustTable\"'"),
- new Quad(
- "value single quoted",
- "DataSchema", "'MyCustTable'",
- "DataSchema=\"'MyCustTable'\""),
- new Quad(
- "value double quoted double trouble",
- "Caption", "\"Company's \"new\" customer\"",
- "Caption=\"\"\"Company's \"\"new\"\" customer\"\"\""),
- new Quad(
- "value single quoted double trouble",
- "Caption", "\"Company's \"new\" customer\"",
- "Caption='\"Company''s \"new\" customer\"'"),
- new Quad(
- "embedded blanks and trim",
- "My Keyword", "My Value",
- " My Keyword = My Value ;MyNextValue=Value"),
- new Quad(
- "value single quotes preserve blanks",
- "My Keyword", " My Value ",
- " My Keyword =' My Value ';MyNextValue=Value"),
- new Quad(
- "value double quotes preserve blanks",
- "My Keyword", " My Value ",
- " My Keyword =\" My Value \";MyNextValue=Value"),
- new Quad(
- "last redundant key wins",
- "SomeKey", "NextValue",
- "SomeKey=FirstValue;SomeKey=NextValue"),
- };
- for (Quad quad : quads) {
- Properties props = ConnectStringParser.parse(quad.str);
-
- assertEquals(quad.why, quad.val, props.get(quad.key));
- String synth = ConnectStringParser.getParamString(props);
-
- try {
- assertEquals("reversible " + quad.why, quad.str, synth);
- } catch (Throwable e) {
- // it's OK that the strings don't match as long as the
- // two strings parse out the same way and are thus
- // "semantically reversible"
- Properties synthProps = ConnectStringParser.parse(synth);
- assertEquals("equivalent " + quad.why, props, synthProps);
- }
- }
- }
-
- static void assertExceptionMatches(
- Throwable e,
- String expectedPattern) {
- if (e == null) {
- fail("Expected an error which matches pattern '" + expectedPattern + "'");
- }
- String msg = e.toString();
- if (!msg.matches(expectedPattern)) {
- fail("Got a different error '" + msg + "' than expected '"
- + expectedPattern + "'");
- }
- }
-
- /** Collection of values comprising a test. */
- static class Quad {
- private final String why;
- private final String key;
- private final String val;
- private final String str;
-
- Quad(String why, String key, String val, String str) {
- this.why = why;
- this.key = key;
- this.val = val;
- this.str = str;
- }
- }
-}
-
-// End ConnectStringParserTest.java