blob: 2c65bfc8c6bbe58e6674431f687f6b7574bf248c [file] [log] [blame]
/*******************************************************************************
* Copyright 2017 General Electric Company
*
* Licensed 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.
*
* SPDX-License-Identifier: Apache-2.0
*******************************************************************************/
package com.ge.predix.acs.attribute.readers;
import java.util.Collections;
import java.util.Set;
import org.apache.commons.lang3.RandomStringUtils;
import org.mockito.InjectMocks;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.mockito.Spy;
import org.springframework.test.util.ReflectionTestUtils;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import com.ge.predix.acs.attribute.cache.AttributeCache;
import com.ge.predix.acs.model.Attribute;
public class ExternalResourceAttributeReaderTest {
@Spy
private AttributeCache attributeCache;
@InjectMocks
@Spy
private ExternalResourceAttributeReader externalResourceAttributeReader;
private static final String IDENTIFIER = "part/03f95db1-4255-4265-a509-f7bca3e1fee4";
private CachedAttributes expectedAdapterAttributes;
private static String generateRandomString() {
return RandomStringUtils.randomAlphanumeric(20);
}
@BeforeClass
void beforeClass() throws Exception {
this.expectedAdapterAttributes = new CachedAttributes(Collections
.singleton(new Attribute(generateRandomString(), generateRandomString(), generateRandomString())));
}
@BeforeMethod
void beforeMethod() {
this.attributeCache = Mockito.mock(AttributeCache.class);
this.externalResourceAttributeReader = new ExternalResourceAttributeReader(null, this.attributeCache, 3000);
MockitoAnnotations.initMocks(this);
}
@Test
public void testGetAttributesWithCacheMiss() throws Exception {
Mockito.when(this.attributeCache.getAttributes(IDENTIFIER)).thenReturn(null);
Mockito.doReturn(this.expectedAdapterAttributes).when(this.externalResourceAttributeReader)
.getAttributesFromAdapters(IDENTIFIER);
Set<Attribute> actualAdapterAttributes = this.externalResourceAttributeReader.getAttributes(IDENTIFIER);
Mockito.verify(this.attributeCache).setAttributes(IDENTIFIER, this.expectedAdapterAttributes);
Assert.assertEquals(this.expectedAdapterAttributes.getAttributes(), actualAdapterAttributes);
}
@Test
public void testGetAttributesWithCacheHit() throws Exception {
Mockito.when(this.attributeCache.getAttributes(IDENTIFIER)).thenReturn(this.expectedAdapterAttributes);
Set<Attribute> actualAdapterAttributes = this.externalResourceAttributeReader.getAttributes(IDENTIFIER);
Mockito.verify(this.externalResourceAttributeReader, Mockito.times(0)).getAttributesFromAdapters(IDENTIFIER);
Mockito.verify(this.attributeCache, Mockito.times(0)).setAttributes(IDENTIFIER, this.expectedAdapterAttributes);
Assert.assertEquals(this.expectedAdapterAttributes.getAttributes(), actualAdapterAttributes);
}
@Test(dataProviderClass = ExternalAttributeReaderHelper.class,
dataProvider = "attributeSizeConstraintDataProvider",
expectedExceptions = { AttributeRetrievalException.class },
expectedExceptionsMessageRegExp = "Total size of attributes or "
+ "number of attributes too large for id: '" + IDENTIFIER + "'.*")
public void testGetAttributesThatAreToLarge(final int maxNumberOfAttributes, final int maxSizeOfAttributesInBytes)
throws Exception {
ExternalAttributeReaderHelper
.setupMockedAdapterResponse(this.externalResourceAttributeReader, this.attributeCache, IDENTIFIER);
ReflectionTestUtils
.setField(this.externalResourceAttributeReader, "maxNumberOfAttributes", maxNumberOfAttributes);
ReflectionTestUtils.setField(this.externalResourceAttributeReader, "maxSizeOfAttributesInBytes",
maxSizeOfAttributesInBytes);
this.externalResourceAttributeReader.getAttributes(IDENTIFIER);
}
}