TokenOperationsStoreTest.java revision 537857b204a4425e0ea257b0413a02c5c7c5e266
d71dbb732372504daff1f1783bc0d8864ce9bd50jbeck * The contents of this file are subject to the terms of the Common Development and
d71dbb732372504daff1f1783bc0d8864ce9bd50jbeck * Distribution License (the License). You may not use this file except in compliance with the
d71dbb732372504daff1f1783bc0d8864ce9bd50jbeck * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
d71dbb732372504daff1f1783bc0d8864ce9bd50jbeck * specific language governing permission and limitations under the License.
d71dbb732372504daff1f1783bc0d8864ce9bd50jbeck * When distributing Covered Software, include this CDDL Header Notice in each file and include
d71dbb732372504daff1f1783bc0d8864ce9bd50jbeck * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
d71dbb732372504daff1f1783bc0d8864ce9bd50jbeck * Header, with the fields enclosed by brackets [] replaced by your own identifying
d71dbb732372504daff1f1783bc0d8864ce9bd50jbeck * information: "Portions copyright [year] [name of copyright owner]".
d71dbb732372504daff1f1783bc0d8864ce9bd50jbeck * Copyright 2013-2014 ForgeRock AS.
d71dbb732372504daff1f1783bc0d8864ce9bd50jbeckpackage org.forgerock.openam.cts.monitoring.impl.operations;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey private TokenOperationsStore tokenOperationsStore;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey private TokenOperationsStore.OperationStoreFactory operationStoreFactory;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey private Map<TokenType, OperationStore> tokenOperations;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey private OperationStore operationFailureStore;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey public void setUp() {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey operationStoreFactory = mock(TokenOperationsStore.OperationStoreFactory.class);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey tokenOperations = new HashMap<TokenType, OperationStore>();
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey operationStore = mock(OperationStore.class);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey operationFailureStore = new OperationStore();
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey tokenOperationsStore = new TokenOperationsStore(operationStoreFactory, tokenOperations, operationStore, operationFailureStore);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey public void shouldCreateTokenOperationsStoreWithDefaultConstructor() {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey TokenOperationsStore localTokenOperationsStore = new TokenOperationsStore();
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey public void shouldAddTokenOperationForSpecificTokenType() {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey CTSOperation operation = CTSOperation.CREATE;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey OperationStore typeOperationStore = mock(OperationStore.class);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey given(operationStoreFactory.createOperationStore()).willReturn(typeOperationStore);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey tokenOperationsStore.addTokenOperation(tokenType, operation, true);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey assertTrue(tokenOperations.containsKey(TokenType.OAUTH));
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey public void shouldAddTokenOperationForSpecificTokenTypeToExistingOperationStore() {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey CTSOperation operation = CTSOperation.CREATE;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey OperationStore typeOperationStore = mock(OperationStore.class);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey tokenOperations.put(TokenType.OAUTH, typeOperationStore);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey tokenOperationsStore.addTokenOperation(tokenType, operation, true);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey verifyZeroInteractions(operationStoreFactory);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey public void shouldAddTokenOperationForSpecificTokenTypeUsingDefaultOperationStoreFactory() {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey TokenOperationsStore.OperationStoreFactory operationStoreFactory =
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey new TokenOperationsStore.OperationStoreFactory();
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey TokenOperationsStore localTokenOperationsStore = new TokenOperationsStore(operationStoreFactory,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey tokenOperations, operationStore, operationFailureStore);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey CTSOperation operation = CTSOperation.CREATE;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey localTokenOperationsStore.addTokenOperation(tokenType, operation, true);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey assertTrue(tokenOperations.containsKey(TokenType.OAUTH));
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey CTSOperation operation = CTSOperation.CREATE;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey tokenOperationsStore.addTokenOperation(operation, true);
d71dbb732372504daff1f1783bc0d8864ce9bd50jbeck public void shouldGetAverageOperationsPerPeriodForSpecificTokenType() {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey CTSOperation operation = CTSOperation.CREATE;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey OperationStore typeOperationStore = mock(OperationStore.class);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey tokenOperations.put(TokenType.OAUTH, typeOperationStore);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey given(typeOperationStore.getAverageRate(operation)).willReturn(1D);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey double result = tokenOperationsStore.getAverageOperationsPerPeriod(tokenType, operation);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey public void shouldGetAverageFailureRateForOperation() {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey // Use mock failure store for this test for simplicity
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey operationFailureStore = mock(OperationStore.class);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey tokenOperationsStore = new TokenOperationsStore(operationStoreFactory, tokenOperations, operationStore, operationFailureStore);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey CTSOperation operation = CTSOperation.READ;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey given(operationFailureStore.getAverageRate(operation)).willReturn(failureRate);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey double result = tokenOperationsStore.getAverageOperationFailuresPerPeriod(operation);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey public void getAverageOperationsPerPeriodForSpecificTokenTypeShouldReturnZeroIfTokenTypeNotSet() {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey CTSOperation operation = CTSOperation.CREATE;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey double result = tokenOperationsStore.getAverageOperationsPerPeriod(tokenType, operation);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey public void shouldGetAverageOperationsPerPeriod() {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey CTSOperation operation = CTSOperation.CREATE;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey given(operationStore.getAverageRate(operation)).willReturn(1D);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey double result = tokenOperationsStore.getAverageOperationsPerPeriod(operation);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey public void shouldGetMaximumOperationsPerPeriodForSpecificTokenType() {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey CTSOperation operation = CTSOperation.CREATE;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey OperationStore typeOperationStore = mock(OperationStore.class);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey tokenOperations.put(TokenType.OAUTH, typeOperationStore);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey given(typeOperationStore.getMaxRate(operation)).willReturn(1L);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey long result = tokenOperationsStore.getMaximumOperationsPerPeriod(tokenType, operation);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey public void getMaximumOperationsPerPeriodForSpecificTokenTypeShouldReturnZeroIfTokenTypeNotSet() {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey CTSOperation operation = CTSOperation.CREATE;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey long result = tokenOperationsStore.getMaximumOperationsPerPeriod(tokenType, operation);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey public void shouldGetMaximumOperationsPerPeriod() {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey CTSOperation operation = CTSOperation.CREATE;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey given(operationStore.getMaxRate(operation)).willReturn(1L);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey long result = tokenOperationsStore.getMaximumOperationsPerPeriod(operation);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey public void shouldGetMinimumOperationsPerPeriodForSpecificTokenType() {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey CTSOperation operation = CTSOperation.CREATE;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey OperationStore typeOperationStore = mock(OperationStore.class);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey tokenOperations.put(TokenType.OAUTH, typeOperationStore);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey given(typeOperationStore.getMinRate(operation)).willReturn(1L);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey long result = tokenOperationsStore.getMinimumOperationsPerPeriod(tokenType, operation);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey public void getMinimumOperationsPerPeriodForSpecificTokenTypeShouldReturnZeroIfTokenTypeNotSet() {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey CTSOperation operation = CTSOperation.CREATE;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey long result = tokenOperationsStore.getMinimumOperationsPerPeriod(tokenType, operation);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey public void shouldGetMinimumOperationsPerPeriod() {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey CTSOperation operation = CTSOperation.CREATE;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey given(operationStore.getMinRate(operation)).willReturn(1L);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey long result = tokenOperationsStore.getMinimumOperationsPerPeriod(operation);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey public void shouldGetOperationsCumulativeCountForSpecificTokenType() {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey CTSOperation operation = CTSOperation.CREATE;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey OperationStore typeOperationStore = mock(OperationStore.class);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey tokenOperations.put(TokenType.OAUTH, typeOperationStore);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey given(typeOperationStore.getCount(operation)).willReturn(1L);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey long result = tokenOperationsStore.getOperationsCumulativeCount(tokenType, operation);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey public void getOperationsCumulativeCountForSpecificTokenTypeShouldReturnZeroIfTokenTypeNotSet() {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey CTSOperation operation = CTSOperation.CREATE;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey long result = tokenOperationsStore.getOperationsCumulativeCount(tokenType, operation);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey public void shouldGetOperationsCumulativeCount() {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey CTSOperation operation = CTSOperation.CREATE;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey given(operationStore.getCount(operation)).willReturn(1L);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey long result = tokenOperationsStore.getOperationsCumulativeCount(operation);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey public void shouldUpdateFailureCountOnFailure() {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey CTSOperation operation = CTSOperation.READ;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey long originalFailureCount = tokenOperationsStore.getOperationFailuresCumulativeCount(operation);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey tokenOperationsStore.addTokenOperation(operation, false);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey assertEquals(originalFailureCount + 1, tokenOperationsStore.getOperationFailuresCumulativeCount(operation));
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey public void shouldNotUpdateFailureCountOnSuccess() {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey CTSOperation operation = CTSOperation.READ;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey long originalFailureCount = tokenOperationsStore.getOperationFailuresCumulativeCount(operation);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey tokenOperationsStore.addTokenOperation(operation, true);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey assertEquals(originalFailureCount, tokenOperationsStore.getOperationFailuresCumulativeCount(operation));
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey public void shouldUpdateFailureCountForAllTokenTypes() {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey CTSOperation operation = CTSOperation.READ;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey long originalFailureCount = tokenOperationsStore.getOperationFailuresCumulativeCount(operation);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey tokenOperations.put(TokenType.REST, new OperationStore());
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey tokenOperations.put(TokenType.OAUTH, new OperationStore());
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey tokenOperationsStore.addTokenOperation(TokenType.REST, operation, false);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey tokenOperationsStore.addTokenOperation(TokenType.OAUTH, operation, false);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey assertEquals(originalFailureCount + 2, tokenOperationsStore.getOperationFailuresCumulativeCount(operation));
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey public void shouldHaveSeparateFailureCountsPerOperation() {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey tokenOperationsStore.addTokenOperation(CTSOperation.CREATE, false);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey tokenOperationsStore.addTokenOperation(CTSOperation.DELETE, false);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey tokenOperationsStore.addTokenOperation(CTSOperation.DELETE, false);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey assertEquals(1, tokenOperationsStore.getOperationFailuresCumulativeCount(CTSOperation.CREATE));