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

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

pivotal-jbarrett commented on a change in pull request #804:
URL: https://github.com/apache/geode-native/pull/804#discussion_r632084836



##########
File path: cppcache/integration/test/CachingProxyTest.cpp
##########
@@ -51,86 +53,67 @@ class CachingProxyTest : public ::testing::Test {
 
   ~CachingProxyTest() override = default;
 
-  void SetUp() override {}
+  void SetUp() override {
+    cache.getPoolManager()
+        .createFactory()
+        .addLocator("localhost", cluster.getLocatorPort())
+        .create("pool");
+
+    region = cache.createRegionFactory(RegionShortcut::CACHING_PROXY)
+                 .setPoolName("pool")
+                 .create("region");
+  }
 
   void TearDown() override {}
 
   Cluster cluster = Cluster{LocatorCount{1}, ServerCount{1}};
+  Cache cache = CacheFactory().create();

Review comment:
       @mreddington Two issues:
   
   1. We are initializing test specific objects in the fixture's, these will 
not be per-test method instances of these objects.
   2. We are performing complex and exception throwing initialization of a 
member variable in the initialization of a type before the constructor is 
invoked. This particular factory can take variable parameters, like connection 
time outs, which could not be forwarded from some constructor or member method 
on this type. Initialization of a variable should never be done like this in 
production code so it also shouldn't in test code.
   
   What this attempt to use the test fixture setup method has shown us it that 
we have a deficiency in how we defined the construction of `Cache` in that you 
can't declare it without also initializing it with some complex builder. Like 
many other state holding types in C++11 it should default construct to some 
safe but unusable state for its declaration, like `std::shared_ptr` default 
initializes to `nullptr`. It should then allow rvalue assignment from the value 
returned from the factory so that it can be fully initialized in the `SetUp` 
method. Similar to how someone with a `Application` class would declare it as a 
member and then initialize it someone in the application lifecycle. 




-- 
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.

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


> Remove(key, nullptr) Not Working Properly
> -----------------------------------------
>
>                 Key: GEODE-9249
>                 URL: https://issues.apache.org/jira/browse/GEODE-9249
>             Project: Geode
>          Issue Type: Bug
>          Components: native client
>            Reporter: Michael Martell
>            Priority: Major
>              Labels: pull-request-available
>
> The Region API supports both local and remote operations. Local operations 
> apply to CACHING_PROXY regions and are supposed to affect only the local 
> cache. However, localInvalidate(key, value) invalidates both local and remote 
> entry.
>  
> This is actually a but in remove(key, nullptr), not localInvalidate.
>  
> Note: Invalidate operations sets the value for the given key to null.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to