blob: 2d70e0cd6c576f04a2125562213eeac6393c2eb1 [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.camel.kamelets.catalog;
import java.util.List;
import java.util.Map;
import io.github.classgraph.ClassGraph;
import org.apache.camel.kamelets.catalog.model.KameletTypeEnum;
import org.apache.camel.tooling.model.ComponentModel;
import org.apache.camel.v1.Kamelet;
import org.apache.camel.v1.kameletspec.DataTypes;
import org.apache.camel.v1.kameletspec.Definition;
import org.apache.camel.v1.kameletspec.Template;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
public class KameletsCatalogTest {
static KameletsCatalog catalog;
@BeforeAll
public static void createKameletsCatalog() {
catalog = new KameletsCatalog();
}
@Test
void testGetKameletsName() throws Exception {
List<String> names = catalog.getKameletsName();
assertFalse(names.isEmpty());
}
@Test
void testGetKamelets() throws Exception {
Map<String, Kamelet> kamelets = catalog.getKamelets();
assertFalse(kamelets.isEmpty());
}
@Test
void testGetKameletsDefinition() throws Exception {
Definition props = catalog.getKameletDefinition("aws-sqs-source");
assertEquals(14, props.getProperties().keySet().size());
assertTrue(props.getProperties().containsKey("queueNameOrArn"));
}
@Test
void testGetKameletsRequiredProperties() throws Exception {
List<String> props = catalog.getKameletRequiredProperties("aws-sqs-source");
assertEquals(2, props.size());
assertTrue(props.contains("queueNameOrArn"));
}
@Test
void testGetKameletsDefinitionNotExists() throws Exception {
Definition props = catalog.getKameletDefinition("word");
assertNull(props);
}
@Test
void testGetKameletsByProvider() throws Exception {
List<Kamelet> c = catalog.getKameletByProvider("Apache Software Foundation");
assertFalse(c.isEmpty());
c = catalog.getKameletByProvider("Eclipse");
assertTrue(c.isEmpty());
}
@Test
void testGetKameletsByType() throws Exception {
List<Kamelet> c = catalog.getKameletsByType(KameletTypeEnum.SOURCE.type());
assertFalse(c.isEmpty());
c = catalog.getKameletsByType(KameletTypeEnum.SINK.type());
assertFalse(c.isEmpty());
c = catalog.getKameletsByType(KameletTypeEnum.ACTION.type());
assertFalse(c.isEmpty());
}
@Test
void testGetKameletsByGroup() throws Exception {
List<Kamelet> c = catalog.getKameletsByGroups("AWS S3");
assertFalse(c.isEmpty());
c = catalog.getKameletsByGroups("AWS SQS");
assertFalse(c.isEmpty());
c = catalog.getKameletsByGroups("Not-existing-group");
assertTrue(c.isEmpty());
}
@Test
void testGetKameletsByNamespace() throws Exception {
List<Kamelet> c = catalog.getKameletsByNamespace("AWS");
assertFalse(c.isEmpty());
assertEquals(29, c.size());
c = catalog.getKameletsByGroups("Not-existing-group");
assertTrue(c.isEmpty());
}
@Test
void testGetKameletsDependencies() throws Exception {
List<String> deps = catalog.getKameletDependencies("aws-sqs-source");
assertEquals(4, deps.size());
deps = catalog.getKameletDependencies("cassandra-sink");
assertEquals(3, deps.size());
assertEquals("camel:jackson", deps.get(0));
}
@Test
void testGetKameletsTemplate() throws Exception {
Template template = catalog.getKameletTemplate("aws-sqs-source");
assertNotNull(template);
}
@Test
void testAllKameletFilesLoaded() throws Exception {
int numberOfKameletFiles = new ClassGraph().acceptPaths("/" + KameletsCatalog.KAMELETS_DIR + "/").scan().getAllResources().size();
assertEquals(numberOfKameletFiles, catalog.getKameletsName().size(), "Some embedded kamelet definition files cannot be loaded.");
}
@Test
void testAllKameletDependencies() throws Exception {
catalog.getAllKameletDependencies();
}
@Test
void testSupportedHeaders() throws Exception {
verifyHeaders("aws-s3-source", 20);
verifyHeaders("aws-s3-sink", 27);
verifyHeaders("aws-cloudtrail-source", 4);
verifyHeaders("aws-redshift-source", 0);
verifyHeaders("aws-not-exists", 0);
verifyHeaders("azure-eventhubs-sink", 2);
verifyHeaders("azure-functions-sink", 8);
verifyHeaders("azure-servicebus-source", 21);
verifyHeaders("azure-storage-blob-source", 34);
verifyHeaders("azure-storage-blob-sink", 33);
verifyHeaders("azure-storage-blob-changefeed-source", 34);
verifyHeaders("azure-storage-datalake-source", 25);
verifyHeaders("azure-storage-datalake-sink", 37);
verifyHeaders("azure-storage-queue-source", 6);
verifyHeaders("azure-storage-queue-sink", 16);
verifyHeaders("cassandra-sink", 1);
verifyHeaders("cassandra-source", 1);
verifyHeaders("couchbase-sink", 2);
verifyHeaders("dropbox-source", 0);
verifyHeaders("dropbox-source", 0);
verifyHeaders("elasticsearch-index-sink", 10);
verifyHeaders("elasticsearch-search-source", 10);
verifyHeaders("exec-sink", 0);
verifyHeaders("fhir-source", 0);
verifyHeaders("file-watch-source", 10);
verifyHeaders("ftp-source", 10);
verifyHeaders("ftp-sink", 8);
verifyHeaders("ftps-source", 10);
verifyHeaders("ftps-sink", 8);
verifyHeaders("github-commit-source", 7);
verifyHeaders("github-event-source", 7);
verifyHeaders("github-pullrequest-comment-source", 7);
verifyHeaders("github-pullrequest-source", 7);
verifyHeaders("github-tag-source", 7);
verifyHeaders("google-bigquery-sink", 4);
verifyHeaders("google-calendar-source", 1);
verifyHeaders("google-functions-sink", 5);
verifyHeaders("google-mail-source", 6);
verifyHeaders("google-pubsub-sink", 3);
verifyHeaders("google-pubsub-source", 5);
verifyHeaders("google-sheets-source", 6);
verifyHeaders("google-storage-source", 20);
verifyHeaders("google-storage-sink", 13);
verifyHeaders("http-source", 5);
verifyHeaders("http-sink", 14);
verifyHeaders("http-secured-source", 5);
verifyHeaders("http-secured-sink", 14);
verifyHeaders("infinispan-source", 6);
verifyHeaders("infinispan-sink", 14);
verifyHeaders("jira-add-comment-sink", 17);
verifyHeaders("jira-add-issue-sink", 17);
verifyHeaders("jira-source", 3);
verifyHeaders("jira-oauth-source", 3);
verifyHeaders("jms-amqp-10-source", 15);
verifyHeaders("jms-amqp-10-sink", 18);
verifyHeaders("jms-apache-artemis-source", 15);
verifyHeaders("jms-apache-artemis-sink", 18);
verifyHeaders("jms-ibm-mq-source", 15);
verifyHeaders("jms-ibm-mq-sink", 18);
verifyHeaders("kafka-source", 9);
verifyHeaders("kafka-sink", 5);
verifyHeaders("kafka-ssl-source", 9);
verifyHeaders("kafka-ssl-sink", 5);
verifyHeaders("kafka-not-secured-source", 9);
verifyHeaders("kafka-not-secured-sink", 5);
verifyHeaders("kubernetes-namespaces-source", 2);
verifyHeaders("kubernetes-nodes-source", 2);
verifyHeaders("kubernetes-pods-source", 2);
verifyHeaders("log-sink", 0);
verifyHeaders("mail-source", 0);
verifyHeaders("mail-sink", 8);
verifyHeaders("mariadb-source", 0);
verifyHeaders("mariadb-sink", 8);
verifyHeaders("minio-source", 14);
verifyHeaders("minio-sink", 22);
verifyHeaders("mongodb-changes-stream-source", 3);
verifyHeaders("mongodb-sink", 12);
verifyHeaders("mongodb-source", 3);
verifyHeaders("mqtt-sink", 3);
verifyHeaders("mqtt-source", 2);
verifyHeaders("mqtt5-sink", 3);
verifyHeaders("mqtt5-source", 2);
verifyHeaders("mysql-sink", 8);
verifyHeaders("mysql-source", 0);
verifyHeaders("nats-sink", 5);
verifyHeaders("nats-source", 5);
verifyHeaders("oracle-database-sink", 8);
verifyHeaders("oracle-database-source", 0);
verifyHeaders("postgresql-sink", 8);
verifyHeaders("postgresql-source", 0);
verifyHeaders("pulsar-sink", 4);
verifyHeaders("pulsar-source", 11);
verifyHeaders("redis-sink", 29);
verifyHeaders("redis-source", 28);
verifyHeaders("rest-openapi-sink", 0);
verifyHeaders("salesforce-create-sink", 1);
verifyHeaders("salesforce-delete-sink", 1);
verifyHeaders("salesforce-update-sink", 1);
verifyHeaders("salesforce-composite-upsert-sink", 1);
verifyHeaders("salesforce-source", 19);
verifyHeaders("scp-sink", 0);
verifyHeaders("sftp-sink", 8);
verifyHeaders("sftp-source", 10);
verifyHeaders("slack-sink", 0);
verifyHeaders("slack-source", 0);
verifyHeaders("splunk-hec-sink", 1);
verifyHeaders("splunk-sink", 0);
verifyHeaders("splunk-source", 0);
verifyHeaders("sqlserver-sink", 8);
verifyHeaders("sqlserver-source", 0);
verifyHeaders("ssh-sink", 4);
verifyHeaders("ssh-source", 4);
verifyHeaders("telegram-sink", 6);
verifyHeaders("telegram-source", 5);
verifyHeaders("timer-source", 2);
verifyHeaders("twitter-directmessage-source", 2);
verifyHeaders("twitter-timeline-source", 1);
verifyHeaders("twitter-search-source", 7);
verifyHeaders("webhook-source", 0);
verifyHeaders("wttrin-source", 5);
}
void verifyHeaders(String name, int expected) {
List<ComponentModel.EndpointHeaderModel> headers = catalog.getKameletSupportedHeaders(name);
assertEquals(expected, headers.size());
}
@Test
void testGetKameletScheme() throws Exception {
assertEquals("aws2-s3", catalog.getKameletScheme("aws-s3"));
assertEquals("aws2-sqs", catalog.getKameletScheme("aws-sqs"));
assertNull(catalog.getKameletScheme("not-known"));
}
@Test
void testHasDataTypes() throws Exception {
assertTrue(catalog.hasDataTypes("aws-s3-source"));
assertFalse(catalog.hasDataTypes("splunk-hec-source"));
}
@Test
void testGetDataTypes() throws Exception {
Map<String, DataTypes> dataTypes = catalog.getDataTypes("aws-s3-source");
assertTrue(dataTypes.size() == 1);
assertNotNull(dataTypes.get("out").getTypes().get("binary"));
assertNotNull(dataTypes.get("out").getTypes().get("cloudevents"));
dataTypes = catalog.getDataTypes("splunk-hec-sink");
assertNull(dataTypes);
}
}