use of uk.gov.gchq.gaffer.named.operation.NamedOperationDetail in project Gaffer by gchq.
the class NamedOperationResolverTest method shouldResolveNamedOperation.
@Test
public void shouldResolveNamedOperation() throws CacheOperationFailedException {
// Given
final String opName = "opName";
final NamedOperationCache cache = mock(NamedOperationCache.class);
final NamedOperationResolver resolver = new NamedOperationResolver(cache);
final User user = mock(User.class);
final NamedOperationDetail extendedNamedOperation = mock(NamedOperationDetail.class);
final GetAdjacentIds op1 = mock(GetAdjacentIds.class);
final GetElements op2 = mock(GetElements.class);
final OperationChain namedOperationOpChain = new OperationChain(Arrays.asList(op1, op2));
final Iterable<?> input = mock(CloseableIterable.class);
final Map<String, Object> params = null;
given(op1.getInput()).willReturn(null);
given(cache.getNamedOperation(opName, user)).willReturn(extendedNamedOperation);
given(extendedNamedOperation.getOperationChain(params)).willReturn(namedOperationOpChain);
final OperationChain<Object> opChain = new OperationChain.Builder().first(new NamedOperation.Builder<>().name(opName).input(input).build()).build();
// When
resolver.preExecute(opChain, new Context(user));
// Then
assertEquals(namedOperationOpChain.getOperations(), opChain.getOperations());
verify(op1).setInput((Iterable) input);
verify(op2, never()).setInput((Iterable) input);
}
use of uk.gov.gchq.gaffer.named.operation.NamedOperationDetail in project Gaffer by gchq.
the class NamedOperationResolverTest method shouldNotExecuteNamedOperationWithWrongParameterName.
@Test
public void shouldNotExecuteNamedOperationWithWrongParameterName() throws OperationException, CacheOperationFailedException {
// Given
final String opName = "opName";
final NamedOperationCache cache = mock(NamedOperationCache.class);
final NamedOperationResolver resolver = new NamedOperationResolver(cache);
final User user = mock(User.class);
Map<String, Object> paramMap = Maps.newHashMap();
// A parameter with the wrong name
paramMap.put("param2", 1L);
ParameterDetail param = new ParameterDetail.Builder().defaultValue(1L).description("Limit param").valueClass(Long.class).build();
Map<String, ParameterDetail> paramDetailMap = Maps.newHashMap();
paramDetailMap.put("param1", param);
// Make a real NamedOperationDetail with a parameter
final NamedOperationDetail extendedNamedOperation = new NamedOperationDetail.Builder().operationName(opName).description("standard operation").operationChain("{ \"operations\": [ { \"class\":\"uk.gov.gchq.gaffer.operation.impl.get.GetAllElements\" }, { \"class\":\"uk.gov.gchq.gaffer.operation.impl.Limit\", \"resultLimit\": \"${param1}\" } ] }").parameters(paramDetailMap).build();
given(cache.getNamedOperation(opName, user)).willReturn(extendedNamedOperation);
// When
assertThatIllegalArgumentException().isThrownBy(() -> resolver.preExecute(new OperationChain.Builder().first(new NamedOperation.Builder<>().name(opName).parameters(paramMap).build()).build(), new Context(user)));
}
use of uk.gov.gchq.gaffer.named.operation.NamedOperationDetail in project Gaffer by gchq.
the class NamedOperationResolverTest method shouldResolveNestedNamedOperation.
@Test
public void shouldResolveNestedNamedOperation() throws OperationException, CacheOperationFailedException {
// Given
final String opName = "opName";
final NamedOperationCache cache = mock(NamedOperationCache.class);
final NamedOperationResolver resolver = new NamedOperationResolver(cache);
final User user = mock(User.class);
final NamedOperationDetail extendedNamedOperation = mock(NamedOperationDetail.class);
final GetAdjacentIds op1 = mock(GetAdjacentIds.class);
final GetElements op2 = mock(GetElements.class);
final OperationChain namedOperationOpChain = new OperationChain(Arrays.asList(op1, op2));
final Iterable<?> input = mock(CloseableIterable.class);
final Map<String, Object> params = null;
given(op1.getInput()).willReturn(null);
given(cache.getNamedOperation(opName, user)).willReturn(extendedNamedOperation);
given(extendedNamedOperation.getOperationChain(params)).willReturn(namedOperationOpChain);
final OperationChain<Object> opChain = new OperationChain.Builder().first(new OperationChain.Builder().first(new NamedOperation.Builder<>().name(opName).input(input).build()).build()).build();
// When
resolver.preExecute(opChain, new Context(user));
// Then
assertEquals(1, opChain.getOperations().size());
final OperationChain<?> nestedOpChain = (OperationChain<?>) opChain.getOperations().get(0);
assertEquals(namedOperationOpChain.getOperations(), nestedOpChain.getOperations());
verify(op1).setInput((Iterable) input);
verify(op2, never()).setInput((Iterable) input);
}
use of uk.gov.gchq.gaffer.named.operation.NamedOperationDetail in project Gaffer by gchq.
the class NamedOperationScoreResolver method getScore.
@Override
public Integer getScore(final NamedOperation operation, final ScoreResolver defaultScoreResolver) {
Integer namedOpScore = null;
NamedOperationDetail namedOpDetail = null;
if (null == operation) {
return 0;
}
try {
namedOpDetail = cache.getFromCache(operation.getOperationName());
} catch (final CacheOperationFailedException e) {
LOGGER.warn("Error accessing cache for Operation '{}': " + e.getMessage(), operation.getClass().getName());
}
if (null != namedOpDetail) {
namedOpScore = namedOpDetail.getScore();
if (null == namedOpScore && null != defaultScoreResolver) {
namedOpScore = defaultScoreResolver.getScore(namedOpDetail.getOperationChain(operation.getParameters()));
}
}
if (null != defaultScoreResolver) {
if (null == namedOpScore) {
namedOpScore = 0;
}
List parameterOperations = operation.getOperations();
if (null != parameterOperations) {
for (final Object objectOperation : parameterOperations) {
Operation op = (Operation) objectOperation;
Integer parameterOpScore = defaultScoreResolver.getScore(op);
namedOpScore += parameterOpScore;
}
}
}
return namedOpScore;
}
use of uk.gov.gchq.gaffer.named.operation.NamedOperationDetail in project Gaffer by gchq.
the class NamedOperationCache method getAll.
private CloseableIterable<NamedOperationDetail> getAll(final User user, final String adminAuth) {
final Set<String> keys = CacheServiceLoader.getService().getAllKeysFromCache(CACHE_NAME);
final Set<NamedOperationDetail> executables = new HashSet<>();
for (final String key : keys) {
try {
NamedOperationDetail op = getFromCache(key);
if (op.hasReadAccess(user, adminAuth)) {
executables.add(op);
}
} catch (final CacheOperationFailedException e) {
LOGGER.error(e.getMessage(), e);
}
}
return new WrappedCloseableIterable<>(executables);
}
Aggregations