/* * 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.geode.pdx; import static org.apache.geode.distributed.ConfigurationProperties.*; import static org.junit.Assert.*; import java.util.Date; import java.util.HashMap; import java.util.Map; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import org.apache.geode.test.junit.categories.SerializationTest; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.experimental.categories.Category; import org.apache.geode.cache.CacheFactory; import org.apache.geode.internal.cache.GemFireCacheImpl; import org.apache.geode.pdx.internal.PdxInstanceFactoryImpl; import org.apache.geode.pdx.internal.PdxInstanceImpl; import org.apache.geode.pdx.internal.PdxString; import org.apache.geode.test.junit.categories.IntegrationTest; @Category({IntegrationTest.class, SerializationTest.class}) public class PdxStringJUnitTest { private GemFireCacheImpl c; @Before public void setUp() { // make it a loner this.c = (GemFireCacheImpl) new CacheFactory().set(MCAST_PORT, "0").setPdxReadSerialized(true) .create(); } @After public void tearDown() { this.c.close(); } @Test public void testEquals() throws Exception { PdxInstanceFactory pf = PdxInstanceFactoryImpl.newCreator("Portfolio", false); pf.writeString("secId", "abc"); PdxInstanceImpl pi = (PdxInstanceImpl) pf.create(); PdxString pdx1 = (PdxString) pi.getRawField("secId"); assertEquals(false, pdx1.equals(null)); assertEquals(false, pdx1.equals(new Date(37))); PdxString pdx2 = new PdxString("abc"); assertEquals(pdx1, pdx2); pdx2 = new PdxString("ABC"); assertEquals(false, pdx1.equals(pdx2)); } @Test public void testHashCodeEquals() throws Exception { PdxInstanceFactory pf = PdxInstanceFactoryImpl.newCreator("Portfolio", false); pf.writeString("secId", "abc"); PdxInstanceImpl pi = (PdxInstanceImpl) pf.create(); PdxString pdx1 = (PdxString) pi.getRawField("secId"); Map<PdxString, String> map = new HashMap<PdxString, String>(); map.put(pdx1, "abc"); PdxString pdx2 = new PdxString("abc"); assertEquals(map.get(pdx2), "abc"); map = new Object2ObjectOpenHashMap(); map.put(pdx1, "abc"); assertEquals(map.get(pdx2), "abc"); } @Test public void testCompareTo() throws Exception { PdxInstanceFactory pf = PdxInstanceFactoryImpl.newCreator("Portfolio", false); pf.writeString("secId", "abc"); PdxInstanceImpl pi = (PdxInstanceImpl) pf.create(); PdxString pdx1 = (PdxString) pi.getRawField("secId"); PdxString pdx2 = new PdxString("abc"); assertEquals(pdx1.compareTo(pdx2), 0); pdx2 = new PdxString("ABC"); assertEquals(pdx1.compareTo(pdx2), 32); // a - A = 32 String str1 = new String("A" + "\u00e9" + "\u00f1"); String str2 = new String("A" + "\u00ea" + "\u00f1"); pf = PdxInstanceFactoryImpl.newCreator("Portfolio", false); pf.writeString("secId", str1); pi = (PdxInstanceImpl) pf.create(); pdx1 = (PdxString) pi.getRawField("secId"); pdx2 = new PdxString(str2); assertEquals(-1, pdx1.compareTo(pdx2)); // str1 < str2 // test compareTo for a huge string and small string StringBuilder sb = new StringBuilder(); for (int i = 0; i < 200000; i++) { sb.append("a"); } str1 = sb.toString(); str2 = "aaa"; pf = PdxInstanceFactoryImpl.newCreator("Portfolio", false); pf.writeString("secId", str1); pi = (PdxInstanceImpl) pf.create(); pdx1 = (PdxString) pi.getRawField("secId"); pdx2 = new PdxString(str2); assertTrue(pdx1.compareTo(pdx2) > 0); // str1 > str2 so positive result sb = null; str1 = null; // huge utf8 string and compareto sb = new StringBuilder(); for (int i = 0; i < 65535; i++) { sb.append("\u00e9"); } str1 = sb.toString(); str2 = "abc"; pf = PdxInstanceFactoryImpl.newCreator("Portfolio", false); pf.writeString("secId", str1); pi = (PdxInstanceImpl) pf.create(); pdx1 = new PdxString(str1); pdx2 = new PdxString(str2); assertTrue(pdx1.compareTo(pdx2) > 0); // str1 > str2 so positive result sb = null; str1 = null; } @Test public void testToString() throws Exception { String s = "abc"; PdxString pdx = new PdxString(s); assertEquals(s, pdx.toString()); PdxInstanceFactory pf = PdxInstanceFactoryImpl.newCreator("Portfolio", false); pf.writeString("secId", "abc"); PdxInstanceImpl pi = (PdxInstanceImpl) pf.create(); pdx = (PdxString) pi.getRawField("secId"); assertEquals(s, pdx.toString()); } /** * this test verifies that pdxstream with pdxType.Object tyep for string and checks whether we * create PdxString or not * * @throws Exception */ @Test public void testJSONFieldNameAsPdxString() throws Exception { String verifyString = "ValueExist"; String jsonString = "{name:\"" + verifyString + "\", age:14}"; PdxString pdx = new PdxString(verifyString); assertEquals(verifyString, pdx.toString()); PdxInstanceImpl pi = (PdxInstanceImpl) JSONFormatter.fromJSON(jsonString); pdx = (PdxString) pi.getRawField("name"); assertEquals(verifyString, pdx.toString()); } @Test public void testJSONFieldNameAsNull() throws Exception { String verifyString = null; String jsonString = "{name:null, age:14}"; PdxInstanceImpl pi = (PdxInstanceImpl) JSONFormatter.fromJSON(jsonString); PdxString pdx = (PdxString) pi.getRawField("name"); assertEquals(verifyString, pdx); } }