[ 
https://issues.apache.org/jira/browse/GEODE-9268?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17493383#comment-17493383
 ] 

ASF GitHub Bot commented on GEODE-9268:
---------------------------------------

pdxcodemonkey commented on a change in pull request #806:
URL: https://github.com/apache/geode-native/pull/806#discussion_r808282553



##########
File path: cppcache/integration/test/PdxInstanceTest.cpp
##########
@@ -273,32 +270,51 @@ TEST(PdxInstanceTest, testPdxInstance) {
 
   EXPECT_EQ(-960665662, pdxTypeInstance->hashcode())
       << "Pdxhashcode hashcode not matched with java pdx hash code.";
+}
 
-  // TODO split into separate test for nested pdx object test.
-  ParentPdx pdxParentOriginal(10);
-  auto pdxParentInstanceFactory =
-      cache.createPdxInstanceFactory("testobject.ParentPdx");
-  clonePdxInstance(pdxParentOriginal, pdxParentInstanceFactory);
-  auto pdxParentInstance = pdxParentInstanceFactory.create();
-  EXPECT_EQ("testobject.ParentPdx", pdxParentInstance->getClassName())
-      << "pdxTypeInstance.getClassName should return testobject.ParentPdx.";
+TEST(PdxInstanceTest, testNestedPdxInstance) {
+  Cluster cluster{LocatorCount{1}, ServerCount{1}};
+
+  cluster.start();
+
+  cluster.getGfsh()
+      .create()
+      .region()
+      .withName("region")
+      .withType("REPLICATE")
+      .execute();
+
+  auto cache = cluster.createCache();
+  auto region = setupRegion(cache);
+  auto&& typeRegistry = cache.getTypeRegistry();
+  auto&& cachePerfStats = std::dynamic_pointer_cast<LocalRegion>(region)
+                              ->getCacheImpl()
+                              ->getCachePerfStats();
+
+  typeRegistry.registerPdxType(ChildPdx::createDeserializable);
+  typeRegistry.registerPdxType(ParentPdx::createDeserializable);
+
+  ParentPdx original{10};
+  auto factory = cache.createPdxInstanceFactory(original.getClassName());
+  clonePdxInstance(original, factory);
+  auto pdxInstance = factory.create();
 
   auto keyport = CacheableKey::create("pdxParentOriginal");
-  region->put(keyport, pdxParentInstance);
-  auto objectFromPdxParentInstanceGet =
+  region->put(keyport, pdxInstance);
+  auto object =
       std::dynamic_pointer_cast<PdxSerializable>(region->get(keyport));
+  EXPECT_TRUE(object);
 
-  EXPECT_EQ(1, cachePerfStats.getPdxInstanceDeserializations())
+  EXPECT_EQ(0, cachePerfStats.getPdxInstanceDeserializations())
       << "pdxInstanceDeserialization should be equal to 1.";

Review comment:
       Likewise on line 313, the test is "less than 0", and the text says 
"greater than 0"
   




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscr...@geode.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


> Fix coredump whenever getFieldNames is called after a cluster restart
> ---------------------------------------------------------------------
>
>                 Key: GEODE-9268
>                 URL: https://issues.apache.org/jira/browse/GEODE-9268
>             Project: Geode
>          Issue Type: Bug
>          Components: native client
>            Reporter: Mario Salazar de Torres
>            Assignee: Mario Salazar de Torres
>            Priority: Major
>              Labels: pull-request-available
>
> *WHEN* A PdxInstance is fetched from a region
>  *AND* The whole cluster is restarted, triggering PdxTypeRegistry cleanup.
>  *AND* getFieldNames is called on the PdxInstance created just before
>  *THEN* a coredump happens.
> —
> *Additional information:*
> Callstack:
> {noformat}
> [ERROR 2021/05/05 12:57:12.781834 CEST main (139683590957120)] Segmentation 
> fault happened
>  0# handler(int) at nc-pdx/main.cpp:225
>  1# 0x00007F0A9F5F13C0 in /lib/x86_64-linux-gnu/libpthread.so.0
>  2# apache::geode::client::PdxType::getPdxFieldTypes() const at 
> cppcache/src/PdxType.hpp:181
>  3# apache::geode::client::PdxInstanceImpl::getFieldNames() at 
> cppcache/src/PdxInstanceImpl.cpp:1383
>  4# main at nc-pdx/main.cpp:374
>  5# __libc_start_main in /lib/x86_64-linux-gnu/libc.so.6
>  6# _start in build/pdx{noformat}



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to