This is an automated email from the ASF dual-hosted git repository.
riemer pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/streampipes.git
The following commit(s) were added to refs/heads/dev by this push:
new 2e0c14191 [hotfix] Fix e2e tests after adapter refactoring (#1655)
2e0c14191 is described below
commit 2e0c14191c3976f1d100978ed12e36604e38d61f
Author: Dominik Riemer <[email protected]>
AuthorDate: Mon Jun 5 15:00:44 2023 +0200
[hotfix] Fix e2e tests after adapter refactoring (#1655)
---
.../connect/adapter/parser/xml/XmlParser.java | 2 +
.../connect/adapter/parser/XmlParserTest.java | 53 ++++++---
ui/cypress/fixtures/connect/format/geoJson.json | 23 ++--
ui/cypress/support/builder/AdapterBuilder.ts | 4 +-
.../support/utils/ProcessingElementTestUtils.ts | 8 +-
ui/cypress/support/utils/StaticPropertyUtils.ts | 2 +-
ui/cypress/support/utils/connect/ConnectBtns.ts | 8 ++
ui/cypress/tests/adapter/formats/format.spec.ts | 121 ++++++++++-----------
.../tests/pipelineElement/SinglePipelineElement.ts | 2 +-
9 files changed, 130 insertions(+), 93 deletions(-)
diff --git
a/streampipes-extensions-management/src/main/java/org/apache/streampipes/extensions/management/connect/adapter/parser/xml/XmlParser.java
b/streampipes-extensions-management/src/main/java/org/apache/streampipes/extensions/management/connect/adapter/parser/xml/XmlParser.java
index 095481726..9013d6be7 100644
---
a/streampipes-extensions-management/src/main/java/org/apache/streampipes/extensions/management/connect/adapter/parser/xml/XmlParser.java
+++
b/streampipes-extensions-management/src/main/java/org/apache/streampipes/extensions/management/connect/adapter/parser/xml/XmlParser.java
@@ -106,6 +106,8 @@ public class XmlParser implements IParser {
if (key.equals(tag)) {
if (xml.get(tag) instanceof List) {
return (List<Map<String, Object>>) xml.get(tag);
+ } else if (xml.get(tag) instanceof Map) {
+ return List.of((Map<String, Object>) xml.get(tag));
} else {
throw new ParseException("Could not parse %s with tag
%s".formatted(xml, tag));
}
diff --git
a/streampipes-extensions-management/src/test/java/org/apache/streampipes/extensions/management/connect/adapter/parser/XmlParserTest.java
b/streampipes-extensions-management/src/test/java/org/apache/streampipes/extensions/management/connect/adapter/parser/XmlParserTest.java
index aa6d66425..b12e7ef32 100644
---
a/streampipes-extensions-management/src/test/java/org/apache/streampipes/extensions/management/connect/adapter/parser/XmlParserTest.java
+++
b/streampipes-extensions-management/src/test/java/org/apache/streampipes/extensions/management/connect/adapter/parser/XmlParserTest.java
@@ -20,6 +20,7 @@ package
org.apache.streampipes.extensions.management.connect.adapter.parser;
import org.apache.streampipes.extensions.api.connect.IParserEventHandler;
import
org.apache.streampipes.extensions.management.connect.adapter.parser.xml.XmlParser;
+import org.apache.streampipes.model.connect.guess.GuessSchema;
import org.apache.streampipes.model.schema.PropertyScope;
import org.apache.streampipes.sdk.builder.PrimitivePropertyBuilder;
import org.apache.streampipes.sdk.builder.adapter.GuessSchemaBuilder;
@@ -48,24 +49,18 @@ public class XmlParserTest extends ParserTest {
+ "</enclosing>"
+ "</list>";
+ private final String sampleEventWithSingleObject = "<?xml version=\"1.0\"
encoding=\"iso-8859-1\"?>"
+ + "<list>"
+ + "<enclosing>"
+ + "<k1>v1</k1><k2>1.0</k2>"
+ + "</enclosing>"
+ + "</list>";
+
private final String tag = "enclosing";
@Test
public void getGuessSchema() {
- var expected = GuessSchemaBuilder.create()
- .property(PrimitivePropertyBuilder
- .create(Datatypes.String, K1)
- .description("")
- .scope(PropertyScope.MEASUREMENT_PROPERTY)
- .build())
- .property(PrimitivePropertyBuilder
- .create(Datatypes.Float, K2)
- .scope(PropertyScope.MEASUREMENT_PROPERTY)
- .description("")
- .build())
- .sample(K1, "v1")
- .sample(K2, 1.0f)
- .build();
+ var expected = getExpectedSchema();
var parser = new XmlParser(tag);
@@ -76,6 +71,19 @@ public class XmlParserTest extends ParserTest {
assertEquals(expected, result);
}
+ @Test
+ public void getGuessSchemaWithSingleObjectInArray() {
+ var expected = getExpectedSchema();
+
+ var parser = new XmlParser(tag);
+
+ InputStream event = toStream(sampleEventWithSingleObject);
+
+ var result = parser.getGuessSchema(event);
+
+ assertEquals(expected, result);
+ }
+
@Test
public void parse() {
var event = toStream(sampleEvent);
@@ -93,4 +101,21 @@ public class XmlParserTest extends ParserTest {
expectedEvent.put(K2, 2.0f);
verify(mockEventHandler, times(1)).handle(expectedEvent);
}
+
+ private GuessSchema getExpectedSchema() {
+ return GuessSchemaBuilder.create()
+ .property(PrimitivePropertyBuilder
+ .create(Datatypes.String, K1)
+ .description("")
+ .scope(PropertyScope.MEASUREMENT_PROPERTY)
+ .build())
+ .property(PrimitivePropertyBuilder
+ .create(Datatypes.Float, K2)
+ .scope(PropertyScope.MEASUREMENT_PROPERTY)
+ .description("")
+ .build())
+ .sample(K1, "v1")
+ .sample(K2, 1.0f)
+ .build();
+ }
}
diff --git a/ui/cypress/fixtures/connect/format/geoJson.json
b/ui/cypress/fixtures/connect/format/geoJson.json
index 047e60497..97e202ba7 100644
--- a/ui/cypress/fixtures/connect/format/geoJson.json
+++ b/ui/cypress/fixtures/connect/format/geoJson.json
@@ -1,16 +1,11 @@
{
- "type": "FeatureCollection",
- "features": [
- {
- "type": "Feature",
- "geometry": {
- "type": "Point",
- "coordinates": [125.6, 10.1]
- },
- "properties": {
- "timestamp": 1667904471000,
- "v1": 4.1
- }
- }
- ]
+ "type": "Feature",
+ "geometry": {
+ "type": "Point",
+ "coordinates": [125.6, 10.1]
+ },
+ "properties": {
+ "timestamp": 1667904471000,
+ "v1": 4.1
+ }
}
diff --git a/ui/cypress/support/builder/AdapterBuilder.ts
b/ui/cypress/support/builder/AdapterBuilder.ts
index d317079a5..c8c029c59 100644
--- a/ui/cypress/support/builder/AdapterBuilder.ts
+++ b/ui/cypress/support/builder/AdapterBuilder.ts
@@ -85,7 +85,9 @@ export class AdapterBuilder {
return this;
}
- public setFormat(format: 'csv' | 'json' | 'json_array' | 'json_object') {
+ public setFormat(
+ format: 'csv' | 'json' | 'json_array' | 'json_object' | 'xml',
+ ) {
this.adapterInput.format = format;
return this;
}
diff --git a/ui/cypress/support/utils/ProcessingElementTestUtils.ts
b/ui/cypress/support/utils/ProcessingElementTestUtils.ts
index c42b661d0..b892de761 100644
--- a/ui/cypress/support/utils/ProcessingElementTestUtils.ts
+++ b/ui/cypress/support/utils/ProcessingElementTestUtils.ts
@@ -39,7 +39,7 @@ export class ProcessingElementTestUtils {
let formatType;
pipelineElementTest.inputFile.endsWith('.csv')
? (formatType = 'csv')
- : (formatType = 'json_array');
+ : (formatType = 'json');
FileManagementUtils.addFile(inputFile);
@@ -64,6 +64,12 @@ export class ProcessingElementTestUtils {
adapterInputBuilder
.addFormatInput('input', ConnectBtns.csvDelimiter(), ';')
.addFormatInput('checkbox', ConnectBtns.csvHeader(), 'check');
+ } else if (formatType === 'json') {
+ adapterInputBuilder.addFormatInput(
+ 'checkbox',
+ 'json_options-array',
+ '',
+ );
}
const adapterInput = adapterInputBuilder.build();
diff --git a/ui/cypress/support/utils/StaticPropertyUtils.ts
b/ui/cypress/support/utils/StaticPropertyUtils.ts
index 7a5d418c0..367302086 100644
--- a/ui/cypress/support/utils/StaticPropertyUtils.ts
+++ b/ui/cypress/support/utils/StaticPropertyUtils.ts
@@ -23,7 +23,7 @@ export class StaticPropertyUtils {
// Configure Properties
configs.forEach(config => {
if (config.type === 'checkbox') {
- cy.dataCy(config.selector).children().click();
+ cy.dataCy(config.selector).children().click({ force: true });
} else if (config.type === 'button') {
cy.dataCy(config.selector).click();
} else if (config.type === 'drop-down') {
diff --git a/ui/cypress/support/utils/connect/ConnectBtns.ts
b/ui/cypress/support/utils/connect/ConnectBtns.ts
index 9841047d6..0fab8973c 100644
--- a/ui/cypress/support/utils/connect/ConnectBtns.ts
+++ b/ui/cypress/support/utils/connect/ConnectBtns.ts
@@ -69,5 +69,13 @@ export class ConnectBtns {
return
'undefined-org.apache.streampipes.extensions.management.connect.adapter.parser.csv-1-header-1';
}
+ public static jsonArrayFieldKey() {
+ return 'undefined-arrayFieldConfig-2-key-0';
+ }
+
+ public static xmlTag() {
+ return
'undefined-org.apache.streampipes.extensions.management.connect.adapter.parser.xml-2-tag-0';
+ }
+
// ========================================================================
}
diff --git a/ui/cypress/tests/adapter/formats/format.spec.ts
b/ui/cypress/tests/adapter/formats/format.spec.ts
index 7e615e869..c91303123 100644
--- a/ui/cypress/tests/adapter/formats/format.spec.ts
+++ b/ui/cypress/tests/adapter/formats/format.spec.ts
@@ -21,6 +21,8 @@ import { ConnectUtils } from
'../../../support/utils/connect/ConnectUtils';
import { ConnectBtns } from '../../../support/utils/connect/ConnectBtns';
import { StaticPropertyUtils } from
'../../../support/utils/StaticPropertyUtils';
import { UserInputBuilder } from '../../../support/builder/UserInputBuilder';
+import { AdapterInput } from '../../../support/model/AdapterInput';
+import { AdapterBuilder } from '../../../support/builder/AdapterBuilder';
describe('Test adapter formats', () => {
beforeEach('Setup Test', () => {
@@ -40,12 +42,13 @@ describe('Test adapter formats', () => {
it('Test json object format', () => {
// Set up test
FileManagementUtils.addFile(baseDir + 'jsonObject.json');
+ const template = makeAdapterInputTemplate();
- navigateToFormatSelection();
+ template
+ .setFormat('json')
+ .addFormatInput('checkbox', 'json_options-single_object', '');
- // Set format configuration
- ConnectBtns.json().click();
- ConnectBtns.jsonObject().click();
+ navigateToFormatSelection(template.build());
// Validate result
validateResult(expected);
@@ -54,11 +57,13 @@ describe('Test adapter formats', () => {
it('Test array with json objects', () => {
// Set up test
FileManagementUtils.addFile('connect/format/jsonArray.json');
- navigateToFormatSelection();
+ const template = makeAdapterInputTemplate();
- // Set format configuration
- ConnectBtns.json().click();
- ConnectBtns.jsonArray().click();
+ template
+ .setFormat('json')
+ .addFormatInput('checkbox', 'json_options-array', '');
+
+ navigateToFormatSelection(template.build());
// Validate result
validateResult(expected);
@@ -67,15 +72,14 @@ describe('Test adapter formats', () => {
it('Test json with a field of type array', () => {
// Set up test
FileManagementUtils.addFile(baseDir + 'jsonArrayField.json');
- navigateToFormatSelection();
+ const template = makeAdapterInputTemplate();
+
+ template
+ .setFormat('json')
+ .addFormatInput('checkbox', 'json_options-array_field', '')
+ .addFormatInput('input', ConnectBtns.jsonArrayFieldKey(), 'field');
- // Set format configuration
- ConnectBtns.json().click();
- ConnectBtns.jsonArrayField().click();
- const arrayFieldInput = UserInputBuilder.create()
- .add('input', 'key', 'field')
- .build();
- StaticPropertyUtils.input(arrayFieldInput);
+ navigateToFormatSelection(template.build());
// Validate result
validateResult(expected);
@@ -90,11 +94,13 @@ describe('Test adapter formats', () => {
v1: 4.1,
};
FileManagementUtils.addFile(baseDir + 'geoJson.json');
- navigateToFormatSelection();
+ const template = makeAdapterInputTemplate();
- // Set format configuration
- ConnectBtns.json().click();
- ConnectBtns.geoJson().click();
+ template
+ .setFormat('json')
+ .addFormatInput('checkbox', 'json_options-geojson', '');
+
+ navigateToFormatSelection(template.build());
// Validate result
validateResult(geoJsonResultEvent);
@@ -103,14 +109,12 @@ describe('Test adapter formats', () => {
it('Test xml format', () => {
// Set up test
FileManagementUtils.addFile(baseDir + 'xmlObject.xml');
- navigateToFormatSelection();
+ const template = makeAdapterInputTemplate();
+ template
+ .setFormat('xml')
+ .addFormatInput('input', ConnectBtns.xmlTag(), 'event');
- // Set format configuration
- ConnectBtns.xml().click();
- const tagInputField = UserInputBuilder.create()
- .add('input', 'tag', 'event')
- .build();
- StaticPropertyUtils.input(tagInputField);
+ navigateToFormatSelection(template.build());
// Validate result
validateResult(expected);
@@ -119,18 +123,13 @@ describe('Test adapter formats', () => {
it('Test csv format with header', () => {
// Set up test
FileManagementUtils.addFile(baseDir + 'csvWithHeader.csv');
- navigateToFormatSelection();
-
- // Set format configuration
- ConnectBtns.csv().click();
- const delimiterInputField = UserInputBuilder.create()
- .add('input', 'delimiter', ';')
- .build();
- StaticPropertyUtils.input(delimiterInputField);
- const headerInputField = UserInputBuilder.create()
- .add('checkbox', 'header', 'check')
- .build();
- StaticPropertyUtils.input(headerInputField);
+ const template = makeAdapterInputTemplate();
+ template
+ .setFormat('csv')
+ .addFormatInput('input', ConnectBtns.csvDelimiter(), ';')
+ .addFormatInput('checkbox', ConnectBtns.csvHeader(), 'check');
+
+ navigateToFormatSelection(template.build());
// Validate result
validateResult(expected);
@@ -139,14 +138,12 @@ describe('Test adapter formats', () => {
it('Test csv format without header', () => {
// Set up test
FileManagementUtils.addFile(baseDir + 'csvWithoutHeader.csv');
- navigateToFormatSelection();
+ const template = makeAdapterInputTemplate();
+ template
+ .setFormat('csv')
+ .addFormatInput('input', ConnectBtns.csvDelimiter(), ';');
- // Set format configuration
- ConnectBtns.csv().click();
- const delimiterInputField = UserInputBuilder.create()
- .add('input', 'delimiter', ';')
- .build();
- StaticPropertyUtils.input(delimiterInputField);
+ navigateToFormatSelection(template.build());
const expectedNoHeader = {
key_0: 1667904471000,
@@ -163,36 +160,38 @@ describe('Test adapter formats', () => {
it('Test csv format with comma', () => {
// Set up test
FileManagementUtils.addFile(baseDir + 'csvWithComma.csv');
- navigateToFormatSelection();
-
- // Set format configuration
- ConnectBtns.csv().click();
- const delimiterInputField = UserInputBuilder.create()
- .add('input', 'delimiter', ',')
- .build();
- StaticPropertyUtils.input(delimiterInputField);
- const headerInputField = UserInputBuilder.create()
- .add('checkbox', 'header', 'check')
- .build();
- StaticPropertyUtils.input(headerInputField);
+ const template = makeAdapterInputTemplate();
+ template
+ .setFormat('csv')
+ .addFormatInput('input', ConnectBtns.csvDelimiter(), ',')
+ .addFormatInput('checkbox', ConnectBtns.csvHeader(), 'check');
+
+ navigateToFormatSelection(template.build());
// Validate result
validateResult(expected);
});
});
-const navigateToFormatSelection = () => {
+const navigateToFormatSelection = (adapterInput: AdapterInput) => {
ConnectUtils.goToConnect();
ConnectUtils.goToNewAdapterPage();
ConnectUtils.selectAdapter('File_Stream');
- ConnectUtils.configureAdapter([]);
+ ConnectUtils.configureAdapter(adapterInput);
+};
+
+const makeAdapterInputTemplate = (): AdapterBuilder => {
+ return AdapterBuilder.create('File_Stream')
+ .setName('File Stream Adapter Test')
+ .setTimestampProperty('timestamp')
+ .addProtocolInput('checkbox', 'replaceTimestamp', 'check');
};
const validateResult = expected => {
- ConnectBtns.formatSelectionNextBtn().click();
+ //ConnectBtns.formatSelectionNextBtn().click();
cy.dataCy('schema-preview-original-event', { timeout: 10000 }).then(
value => {
const jsonResult = removeWhitespaceExceptInQuotes(value.text());
diff --git a/ui/cypress/tests/pipelineElement/SinglePipelineElement.ts
b/ui/cypress/tests/pipelineElement/SinglePipelineElement.ts
index 46b6c8565..3bdac4f86 100644
--- a/ui/cypress/tests/pipelineElement/SinglePipelineElement.ts
+++ b/ui/cypress/tests/pipelineElement/SinglePipelineElement.ts
@@ -22,7 +22,7 @@ import { ProcessorTest } from
'../../support/model/ProcessorTest';
const allTests = Cypress.env('processingElements');
allTests.forEach(test => {
- const testNames = ['staticmath1'];
+ const testNames = ['splitArray1'];
const processorTest = test as ProcessorTest;