blob: ccf72cbe815a49e8ebfa7d587b081eab00f0e33b [file] [log] [blame]
/*
* 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.
*/
using System;
using System.Threading;
namespace Apache.Geode.Client.UnitTests
{
using NUnit.Framework;
using Apache.Geode.DUnitFramework;
using Apache.Geode.Client;
using Apache.Geode.Client.UnitTests;
using Region = Apache.Geode.Client.IRegion<Object, Object>;
[TestFixture]
[Category("group1")]
[Category("unicast_only")]
[Category("generics")]
public class ThinClientListenerWriter : ThinClientRegionSteps
{
private TallyWriter<object, object> m_writer;
private TallyListener<object, object> m_listener;
RegionOperation o_region;
private UnitProcess m_client1, m_client2, m_client3;
protected override ClientBase[] GetClients()
{
m_client1 = new UnitProcess();
m_client2 = new UnitProcess();
m_client3 = new UnitProcess();
return new ClientBase[] { m_client1, m_client2, m_client3 };
}
public void CreateRegion(string locators,
bool caching, bool listener, bool writer)
{
if (listener)
{
m_listener = new TallyListener<object, object>();
}
else
{
m_listener = null;
}
Region region = null;
region = CacheHelper.CreateTCRegion_Pool<object, object>(RegionName, true, caching,
m_listener, locators, "__TESTPOOL1_", true);
if (writer)
{
m_writer = new TallyWriter<object, object>();
AttributesMutator<object, object> at = region.AttributesMutator;
at.SetCacheWriter(m_writer);
}
}
public void ValidateEvents()
{
Thread.Sleep(5000);
m_listener.ShowTallies();
m_writer.ShowTallies();
Assert.AreEqual(0, m_listener.Creates, "Should be 0 creates");
Assert.AreEqual(0, m_listener.Updates, "Should be 0 updates");
Assert.AreEqual(20, m_listener.Invalidates, "Should be 20 invalidates");
Assert.AreEqual(5, m_listener.Destroys, "Should be 5 destroys");
Assert.AreEqual(false, m_writer.IsWriterInvoked, "Writer Should not be invoked");
}
public void ValidateGetEvents(int creates, int updates)
{
Thread.Sleep(1000);
m_listener.ShowTallies();
Assert.AreEqual(creates, m_listener.Creates, "Incorrect creates");
Assert.AreEqual(updates, m_listener.Updates, "Incorrect updates");
}
public void ValidateListenerWriterWithNBSTrue()
{
Thread.Sleep(5000);
m_listener.ShowTallies();
Assert.AreEqual(10, m_listener.Creates, "Should be 10 creates");
Assert.AreEqual(10, m_listener.Updates, "Should be 10 updates");
Assert.AreEqual(0, m_listener.Invalidates, "Should be 0 invalidates");
Assert.AreEqual(5, m_listener.Destroys, "Should be 5 destroys");
Assert.AreEqual(false, m_writer.IsWriterInvoked, "Writer should not be invoked");
}
public void RegisterAllKeysRN()
{
Region region = CacheHelper.GetVerifyRegion<object, object>(RegionName);
region.GetSubscriptionService().RegisterAllKeys(false, false, false);
}
public void CallOp()
{
o_region = new RegionOperation(RegionName);
o_region.PutOp(5, null);
Thread.Sleep(1000); // let the events reach at other end.
o_region.PutOp(5, null);
Thread.Sleep(1000);
o_region.InvalidateOp(5, null);
Thread.Sleep(1000);
o_region.DestroyOp(5, null);
Thread.Sleep(1000);
}
public void PutOp(string key, string value)
{
Util.Log("PutOp started");
o_region = new RegionOperation(RegionName);
Region r = o_region.Region;
r[key] = value;
Thread.Sleep(1000); // let the events reach at other end.
Util.Log("PutOp finished");
}
public void InvalidateOp(string key)
{
Util.Log("InvalidateOp started");
o_region = new RegionOperation(RegionName);
Region r = o_region.Region;
r.GetLocalView().Invalidate(key);
Thread.Sleep(1000); // let the events reach at other end.
Util.Log("InvalidateOp finished");
}
public void GetOp(string key)
{
Util.Log("GetOp started");
o_region = new RegionOperation(RegionName);
Region r = o_region.Region;
Object val = r[key];
Thread.Sleep(1000); // let the events reach at other end.
Util.Log("GetOp finished");
}
public void registerPdxType8()
{
CacheHelper.DCache.TypeRegistry.RegisterPdxType(PdxTests.PdxTypes8.CreateDeserializable);
}
void runThinClientListenerWriterTest()
{
CacheHelper.SetupJavaServers(true, "cacheserver_notify_subscription.xml");
CacheHelper.StartJavaLocator(1, "GFELOC");
Util.Log("Locator started");
CacheHelper.StartJavaServerWithLocators(1, "GFECS1", 1);
Util.Log("Cacheserver 1 started.");
m_client1.Call(CacheHelper.InitClient);
Util.Log("Creating region in client1, no-ack, no-cache, no-listener and no-writer");
m_client1.Call(CreateRegion, CacheHelper.Locators,
false, false, false);
m_client2.Call(CacheHelper.InitClient);
Util.Log("Creating region in client2 , no-ack, no-cache, with listener and writer");
m_client2.Call(CreateRegion, CacheHelper.Locators,
false, true, true);
m_client1.Call(registerPdxType8);
m_client2.Call(registerPdxType8);
m_client2.Call(RegisterAllKeys, new string[] { RegionName });
m_client1.Call(CallOp);
m_client2.Call(ValidateListenerWriterWithNBSTrue);
m_client1.Call(CacheHelper.CloseCache);
m_client2.Call(CacheHelper.CloseCache);
CacheHelper.StopJavaServer(1);
CacheHelper.SetupJavaServers(true, "cacheserver.xml");
CacheHelper.StartJavaServerWithLocators(1, "GFECS1", 1);
Util.Log("Cacheserver 1 started.");
Util.Log("Creating region in client1, no-ack, no-cache, no-listener and no-writer");
m_client1.Call(CreateRegion, CacheHelper.Locators,
false, false, false);
Util.Log("Creating region in client2 , no-ack, no-cache, with listener and writer");
m_client2.Call(CreateRegion, CacheHelper.Locators,
false, true, true);
m_client3.Call(CacheHelper.InitClient);
Util.Log("Creating region in client2 , no-ack, no-cache, with listener and writer");
m_client3.Call(CreateRegion, CacheHelper.Locators,
false, true, true);
m_client1.Call(registerPdxType8);
m_client2.Call(registerPdxType8);
m_client2.Call(RegisterAllKeysRN);
m_client3.Call(RegisterAllKeysRN);
m_client1.Call(CallOp);
m_client2.Call(ValidateEvents);
m_client3.Call(ValidateEvents);
m_client1.Call(CacheHelper.Close);
m_client2.Call(CacheHelper.Close);
m_client3.Call(CacheHelper.Close);
CacheHelper.StopJavaServer(1);
/* Bug #381 */
CacheHelper.SetupJavaServers(true, "cacheserver.xml");
CacheHelper.StartJavaServerWithLocators(1, "GFECS1", 1);
Util.Log("Cacheserver 1 started.");
Util.Log("Creating region in client1, no-ack, no-cache, no-listener and no-writer");
m_client1.Call(CreateRegion,CacheHelper.Locators,
false, false, false);
Util.Log("Creating region in client2 , with listener and writer");
m_client2.Call(CreateRegion, CacheHelper.Locators,
true, true, true);
m_client3.Call(CacheHelper.InitClient);
Util.Log("Creating region in client3 , with listener and writer");
m_client3.Call(CreateRegion, CacheHelper.Locators,
true, true, true);
m_client2.Call(RegisterAllKeysRN);
m_client1.Call(PutOp, "Key-1", "Value-1");
m_client2.Call(GetOp, "Key-1");
m_client2.Call(ValidateGetEvents, 0, 1);
Util.Log("ValidateGetEvents 1 done. ");
m_client3.Call(RegisterAllKeysRN);
m_client3.Call(GetOp, "Key-1");
m_client3.Call(ValidateGetEvents, 1, 0);
Util.Log("ValidateGetEvents 2 done. ");
m_client2.Call(PutOp, "Key-2", "Value-2");
m_client2.Call(InvalidateOp, "Key-2");
m_client2.Call(GetOp, "Key-2");
m_client2.Call(ValidateGetEvents, 1, 2);
Util.Log("ValidateGetEvents 3 done. ");
m_client1.Call(CacheHelper.Close);
m_client2.Call(CacheHelper.Close);
m_client3.Call(CacheHelper.Close);
CacheHelper.StopJavaServer(1);
CacheHelper.StopJavaLocator(1);
Util.Log("Locator stopped");
CacheHelper.ClearLocators();
CacheHelper.ClearEndpoints();
}
[TearDown]
public override void EndTest()
{
base.EndTest();
}
[Test]
public void ThinClientListenerWriterTest()
{
runThinClientListenerWriterTest();
}
}
}