content: /*
   * 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.proto.Requests;
  import org.apache.calcite.avatica.proto.Requests.UpdateBatch;
  import org.apache.calcite.avatica.remote.Service.ExecuteBatchRequest;
  
  import org.junit.Test;
  
  import java.util.Arrays;
  import java.util.List;
  
  import static org.junit.Assert.assertEquals;
  import static org.junit.Assert.assertFalse;
  import static org.junit.Assert.assertNotNull;
  import static org.junit.Assert.assertNull;
  import static org.junit.Assert.assertTrue;
  
  /**
   * Test class for ExecuteBatchRequest
   */
  public class ExecuteBatchRequestTest {
  
    private ExecuteBatchRequest identityRequest = new ExecuteBatchRequest();
    private List<TypedValue> paramValues =
        Arrays.asList(TypedValue.create(Rep.BOOLEAN.name(), Boolean.TRUE),
            TypedValue.create(Rep.STRING.name(), "string"));
  
    @Test public void testConversionFromProtobuf() {
      ExecuteBatchRequest request = new ExecuteBatchRequest("connectionId", 12345,
          Arrays.asList(paramValues, paramValues, paramValues));
  
      assertFalse("A request with the POJO TypedValue list should return false",
          request.hasProtoUpdateBatches());
  
      // Everything will be serialized via protobuf
      Requests.ExecuteBatchRequest protoRequest = request.serialize();
  
      ExecuteBatchRequest copy = identityRequest.deserialize(protoRequest);
  
      assertNull("Parameter values (pojo) list should be null", copy.parameterValues);
      assertTrue("hasProtoUpdateBatches() should return true", copy.hasProtoUpdateBatches());
      List<UpdateBatch> protoParameterValues = copy.getProtoUpdateBatches();
      assertNotNull("Protobuf serialized parameterValues should not be null", protoParameterValues);
  
      assertEquals(request.parameterValues.size(), protoParameterValues.size());
  
      for (int i = 0; i < request.parameterValues.size(); i++) {
        List<TypedValue> orig = request.parameterValues.get(i);
        List<Common.TypedValue> proto = protoParameterValues.get(i).getParameterValuesList();
        assertEquals("Mismatch in length of TypedValues at index " + i, orig.size(), proto.size());
  
        // Don't re-test TypedValue serialization
      }
  
      // Everything else should be equivalent.
      assertEquals(request.connectionId, copy.connectionId);
      assertEquals(request.statementId, copy.statementId);
    }
  }
  
  // End ExecuteBatchRequestTest.java
  