blob: aced33d4bde599a2f8933689d85718923a0ad125 [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.Collections.Generic;
#pragma warning disable 618
namespace Apache.Geode.Client.UnitTests
{
using NUnit.Framework;
using Apache.Geode.Client.Tests;
using Apache.Geode.DUnitFramework;
using Apache.Geode.Client;
using AssertionException = Apache.Geode.Client.AssertionException;
/// <summary>
/// Enumeration to indicate the result expected of an operation.
/// </summary>
public enum ExpectedResult
{
Success,
AuthRequiredException,
AuthFailedException,
NotAuthorizedException,
OtherException
}
/// <summary>
/// Helper class to start/stop cache servers and other utility methods
/// for security tests.
/// </summary>
public class SecurityTestUtil
{
public static List<CredentialGenerator> getAllGenerators(bool isMultiUser)
{
string dataDir = Util.GetEnvironmentVariable("CPP_TESTOUT");
List<CredentialGenerator> generators = new List<CredentialGenerator>();
foreach (CredentialGenerator.ClassCode code in Enum.GetValues(
typeof(CredentialGenerator.ClassCode)))
{
CredentialGenerator gen = CredentialGenerator.Create(code, isMultiUser);
if (gen != null)
{
gen.Init(dataDir, dataDir);
generators.Add(gen);
}
}
return generators;
}
public static string GetServerArgs(string authenticator,
Properties<string, string> extraProps, Properties<string, string> javaProps)
{
return Utility.GetServerArgs(authenticator, null, null,
extraProps, javaProps);
}
public static string GetServerArgs(string authenticator, string accessor,
string accessorPP, Properties<string, string> extraProps, Properties<string, string> javaProps)
{
return Utility.GetServerArgs(authenticator, accessor, accessorPP,
extraProps, javaProps);
}
public static Properties<string, string> ConcatProperties(params Properties<string, string>[] propsArray)
{
Properties<string, string> result = null;
if (propsArray != null)
{
result = new Properties<string, string>();
foreach (Properties<string, string> props in propsArray)
{
result.AddAll(props);
}
}
return result;
}
public static void CreateClientMU(string regionName, string locators,
string authInit, Properties<string, string> credentials, bool isMultiuser)
{
CreateClient(regionName, locators, authInit, credentials,
ExpectedResult.Success, isMultiuser, null);
}
//for notification
public static void CreateClientMU2(string regionName, string locators,
string authInit, Properties<string, string> credentials, bool isMultiuser, bool notificationEnabled)
{
CreateClient<object, object>(regionName, locators,
authInit, credentials, false,
notificationEnabled, 0, -1,
null, ExpectedResult.Success, isMultiuser, null, false, false);
}
//for durable client...
public static void CreateMUDurableClient(string regionName, string locators,
string authInit, string durableClientId, bool isMultiuser, bool notificationEnabled)
{
CreateClient<object, object>(regionName, locators,
authInit, null, false,
notificationEnabled, 0, -1,
null, ExpectedResult.Success, isMultiuser, durableClientId, false, false);
}
public static void CreateClient(string regionName, string locators,
string authInit, Properties<string, string> credentials)
{
CreateClient(regionName, locators, authInit, credentials,
ExpectedResult.Success);
}
public static void CreateClientSSL(string regionName, string locators,
string authInit, Properties<string, string> credentials, bool ssl, bool withPassword)
{
CreateClient<object, object>(regionName, locators, authInit, credentials,
true, true, 1, -1, null, ExpectedResult.Success, false, null, ssl, withPassword);
}
public static void CreateClientR0(string regionName, string locators,
string authInit, Properties<string, string> credentials)
{
CreateClient(regionName, locators, authInit, credentials,
ExpectedResult.Success, 0);
}
public static void CreateClient(string regionName, string locators,
string authInit, Properties<string, string> credentials, ExpectedResult expect, int redundancy)
{
CreateClient<object, object>(regionName, locators, authInit, credentials, true, true,
redundancy, -1, null, expect);
}
public static void CreateClient(string regionName, string locators,
string authInit, Properties<string, string> credentials, ExpectedResult expect,
bool isMultiuser, string durebleClientId)
{
CreateClient<object, object>(regionName, locators, authInit, credentials, false, false,
0, -1, null, expect, isMultiuser, durebleClientId, false, false);
}
public static void CreateClient(string regionName, string locators,
string authInit, Properties<string, string> credentials, ExpectedResult expect)
{
CreateClient<object, object>(regionName, locators, authInit, credentials, true, true,
1, -1, null, expect);
}
public static void CreateClient(string regionName, string locators,
string authInit, Properties<string, string> credentials, int numConnections,
ExpectedResult expect)
{
CreateClient<object, object>(regionName, locators, authInit, credentials, true, true,
1, numConnections, null, expect);
}
public static void CreateClient<TKey, TValue>(string regionName, string locators,
string authInit, Properties<string, string> credentials, bool caching,
bool clientNotification, int redundancyLevel, int numConnections,
ICacheListener<TKey, TValue> listener, ExpectedResult expect)
{
CreateClient<TKey, TValue>(regionName, locators, authInit, credentials, true, true,
redundancyLevel, numConnections, null, expect, false, null, false, false);
}
public static void CreateClient<TKey, TValue>(string regionName, string locators,
string authInit, Properties<string, string> credentials, bool caching,
bool clientNotification, int redundancyLevel, int numConnections,
ICacheListener<TKey, TValue> listener, ExpectedResult expect, bool isMultiUser, string durableClientId, bool ssl, bool withPassword)
{
Util.Log("Redundancy Level = {0}", redundancyLevel);
CacheHelper.Close();
Properties<string, string> sysProps = new Properties<string, string>();
if (durableClientId != null)
sysProps.Insert("durable-client-id", durableClientId);
Utility.GetClientProperties(authInit, credentials, ref sysProps);
if (numConnections >= 0)
{
sysProps.Insert("connection-pool-size", numConnections.ToString());
}
if (ssl && withPassword)
{
string keystore = Util.GetEnvironmentVariable("CPP_TESTOUT") + "/keystore";
sysProps.Insert("ssl-enabled", "true");
sysProps.Insert("ssl-keystore", keystore + "/client_keystore.password.pem");
sysProps.Insert("ssl-truststore", keystore + "/client_truststore.pem");
sysProps.Insert("ssl-keystore-password", "gemstone");
}
else if (ssl)
{
string keystore = Util.GetEnvironmentVariable("CPP_TESTOUT") + "/keystore";
sysProps.Insert("ssl-enabled", "true");
sysProps.Insert("ssl-keystore", keystore + "/client_keystore.pem");
sysProps.Insert("ssl-truststore", keystore + "/client_truststore.pem");
}
try
{
CacheHelper.InitConfig(sysProps);
CacheHelper.CreatePool<TKey, TValue>("__TESTPOOL1_", locators, (string)null,
redundancyLevel, clientNotification, numConnections, isMultiUser);
CacheHelper.CreateTCRegion_Pool<TKey, TValue>(regionName, true, caching,
listener, locators, "__TESTPOOL1_", clientNotification);
if (expect != ExpectedResult.Success)
{
Assert.Fail(
"CreateClient: expected an exception in creating region.");
}
}
catch (AssertionException)
{
throw;
}
catch (AuthenticationRequiredException ex)
{
if (expect == ExpectedResult.AuthRequiredException)
{
Util.Log("CreateClient: got expected exception in creating region: "
+ ex.Message);
}
else
{
throw;
}
}
catch (AuthenticationFailedException ex)
{
if (expect == ExpectedResult.AuthFailedException)
{
Util.Log("CreateClient: got expected exception in creating region: "
+ ex.Message);
}
else
{
throw;
}
}
catch (Exception ex)
{
if (expect == ExpectedResult.OtherException)
{
Util.Log("CreateClient: got expected exception in creating region: "
+ ex.GetType() + "::" + ex.Message);
}
else
{
throw;
}
}
}
}
}