| /* |
| * 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; |
| } |
| } |
| } |
| } |
| } |