blob: 33b10b67293629af6c0f1900c29984e40d4fd0ca [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.
*/
package org.apache.syncope.fit.core;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.fail;
import static org.junit.jupiter.api.Assumptions.assumeTrue;
import java.util.List;
import org.apache.syncope.common.lib.SyncopeConstants;
import org.apache.syncope.common.lib.request.UserCR;
import org.apache.syncope.common.lib.to.AnyTypeClassTO;
import org.apache.syncope.common.lib.to.CamelRouteTO;
import org.apache.syncope.common.lib.to.PlainSchemaTO;
import org.apache.syncope.common.lib.to.UserTO;
import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.common.lib.types.AttrSchemaType;
import org.apache.syncope.common.lib.types.SchemaType;
import org.apache.syncope.fit.AbstractITCase;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
public class CamelRouteITCase extends AbstractITCase {
@BeforeEach
public void check() {
assumeTrue(ADMIN_CLIENT.platform().getProvisioningInfo().getUserProvisioningManager().contains("Camel"));
}
@Test
public void userRoutes() {
List<CamelRouteTO> userRoutes = CAMEL_ROUTE_SERVICE.list(AnyTypeKind.USER);
assertNotNull(userRoutes);
assertEquals(16, userRoutes.size());
userRoutes.forEach(route -> assertNotNull(route.getContent()));
}
@Test
public void groupRoutes() {
List<CamelRouteTO> groupRoutes = CAMEL_ROUTE_SERVICE.list(AnyTypeKind.GROUP);
assertNotNull(groupRoutes);
assertEquals(8, groupRoutes.size());
groupRoutes.forEach(route -> assertNotNull(route.getContent()));
}
private static CamelRouteTO doUpdate(final AnyTypeKind anyTypeKind, final String key, final String content) {
CamelRouteTO route = CAMEL_ROUTE_SERVICE.read(anyTypeKind, key);
route.setContent(content);
CAMEL_ROUTE_SERVICE.update(anyTypeKind, route);
// getting new route definition
return CAMEL_ROUTE_SERVICE.read(anyTypeKind, key);
}
@Test
public void update() {
CamelRouteTO oldRoute = CAMEL_ROUTE_SERVICE.read(AnyTypeKind.USER, "createUser");
assertNotNull(oldRoute);
String routeContent = "<route id=\"createUser\">\n"
+ " <from uri=\"direct:createUser\"/>\n"
+ " <setProperty name=\"actual\">\n"
+ " <simple>${body}</simple>\n"
+ " </setProperty>\n"
+ " <doTry>\n"
+ " <bean ref=\"uwfAdapter\" method=\"create(${body},${exchangeProperty.disablePwdPolicyCheck},\n"
+ " ${exchangeProperty.enabled})\"/>\n"
+ " <to uri=\"propagate:create?anyTypeKind=USER\"/>\n"
+ " <to uri=\"direct:createPort\"/>\n"
+ " <to uri=\"log:myLog\"/>\n"
+ " <doCatch> \n"
+ " <exception>java.lang.RuntimeException</exception>\n"
+ " <handled>\n"
+ " <constant>false</constant>\n"
+ " </handled>\n"
+ " <to uri=\"direct:createPort\"/>\n"
+ " </doCatch>\n"
+ " </doTry>\n"
+ "</route>";
try {
CamelRouteTO route = doUpdate(AnyTypeKind.USER, "createUser", routeContent);
assertEquals(routeContent, route.getContent());
} finally {
doUpdate(AnyTypeKind.USER, oldRoute.getKey(), oldRoute.getContent());
}
}
@Test
public void scriptingUpdate() {
CamelRouteTO oldRoute = CAMEL_ROUTE_SERVICE.read(AnyTypeKind.USER, "createUser");
// updating route content including new attribute management
String routeContent = ""
+ " <route id=\"createUser\">\n"
+ " <from uri=\"direct:createUser\"/>\n"
+ " <setProperty name=\"actual\">\n"
+ " <simple>${body}</simple>\n"
+ " </setProperty>\n"
+ " <setBody>\n"
+ " <groovy>\n"
+ "request.body.getPlainAttr(\"camelAttribute\").get().getValues().set(0,\"true\")\n"
+ " return request.body\n"
+ " </groovy>\n"
+ " </setBody>\n"
+ " <doTry>\n"
+ " <bean ref=\"uwfAdapter\" method=\"create(${body},${exchangeProperty.disablePwdPolicyCheck},\n"
+ " ${exchangeProperty.enabled})\"/>\n"
+ " <to uri=\"propagate:create?anyTypeKind=USER\"/>\n"
+ " <to uri=\"direct:createPort\"/>\n"
+ " <doCatch> \n"
+ " <exception>java.lang.RuntimeException</exception>\n"
+ " <handled>\n"
+ " <constant>false</constant>\n"
+ " </handled>\n"
+ " <to uri=\"direct:createPort\"/>\n"
+ " </doCatch>\n"
+ " </doTry>\n"
+ " </route> ";
try {
doUpdate(AnyTypeKind.USER, "createUser", routeContent);
// creating new schema attribute for user
PlainSchemaTO schemaTO = new PlainSchemaTO();
schemaTO.setKey("camelAttribute");
schemaTO.setType(AttrSchemaType.String);
createSchema(SchemaType.PLAIN, schemaTO);
AnyTypeClassTO typeClass = new AnyTypeClassTO();
typeClass.setKey("camelAttribute");
typeClass.getPlainSchemas().add(schemaTO.getKey());
ANY_TYPE_CLASS_SERVICE.create(typeClass);
UserCR userCR = new UserCR();
userCR.setRealm(SyncopeConstants.ROOT_REALM);
userCR.getAuxClasses().add(typeClass.getKey());
String userId = getUUIDString() + "camelUser@syncope.apache.org";
userCR.setUsername(userId);
userCR.setPassword("password123");
userCR.getPlainAttrs().add(attr("userId", userId));
userCR.getPlainAttrs().add(attr("fullname", userId));
userCR.getPlainAttrs().add(attr("surname", userId));
userCR.getPlainAttrs().add(attr("camelAttribute", "false"));
UserTO userTO = createUser(userCR).getEntity();
assertNotNull(userTO);
assertEquals("true", userTO.getPlainAttr("camelAttribute").get().getValues().get(0));
} finally {
doUpdate(AnyTypeKind.USER, oldRoute.getKey(), oldRoute.getContent());
}
}
@Test
public void issueSYNCOPE931() {
CamelRouteTO oldRoute = CAMEL_ROUTE_SERVICE.read(AnyTypeKind.USER, "createUser");
assertNotNull(oldRoute);
String routeContent = "<route id=\"createUser\">\n"
+ " <from uri=\"direct:createUser\"/>\n"
+ " <setProperty name=\"actual\">\n"
+ " <simple>${body}</simple>\n"
+ " </setProperty>\n"
+ " <doTry>\n"
+ " <bean ref=\"uwfAdapter\" method=\"create(${body},${exchangeProperty.disablePwdPolicyCheck},\n"
+ " ${exchangeProperty.enabled})\"/>\n"
+ " <to uri=\"propagate:create123?anyTypeKind=USER\"/>\n"
+ " <to uri=\"direct:createPort\"/>\n"
+ " <to uri=\"log:myLog\"/>\n"
+ " <doCatch> \n"
+ " <exception>java.lang.RuntimeException</exception>\n"
+ " <handled>\n"
+ " <constant>false</constant>\n"
+ " </handled>\n"
+ " <to uri=\"direct:createPort\"/>\n"
+ " </doCatch>\n"
+ " </doTry>\n"
+ "</route>";
// Try to update a route with an incorrect propagation type
try {
doUpdate(AnyTypeKind.USER, "createUser", routeContent);
fail("Error expected on an incorrect propagation type");
} catch (Exception ex) {
// Expected
}
// Now update the route again with the correct propagation type
routeContent = routeContent.replaceFirst("create123", "create");
try {
CamelRouteTO route = doUpdate(AnyTypeKind.USER, "createUser", routeContent);
assertEquals(routeContent, route.getContent());
} finally {
doUpdate(AnyTypeKind.USER, oldRoute.getKey(), oldRoute.getContent());
}
}
}