diff options
author | liamfallon <liam.fallon@ericsson.com> | 2018-09-28 14:26:40 +0100 |
---|---|---|
committer | liamfallon <liam.fallon@ericsson.com> | 2018-09-28 14:26:48 +0100 |
commit | 4ee8953bc55f2b905dee845728b3287eb4e8e795 (patch) | |
tree | fa5a89880e33561ef171f16cb66eafbb02aabb56 /auth/cli-codegen/src/test/java/org | |
parent | 1899306c1087d55f2e923f32a7e9ea038aa5275a (diff) |
Add JUnit for cli-codegen
The cli-codegen tool did not have any unit tests.
Issue-ID: POLICY-1034
Change-Id: If9d3924adea703b165b360e314ea3cb417a91d21
Signed-off-by: liamfallon <liam.fallon@ericsson.com>
Diffstat (limited to 'auth/cli-codegen/src/test/java/org')
2 files changed, 578 insertions, 0 deletions
diff --git a/auth/cli-codegen/src/test/java/org/onap/policy/apex/auth/clicodegen/CliCodegenTest.java b/auth/cli-codegen/src/test/java/org/onap/policy/apex/auth/clicodegen/CliCodegenTest.java new file mode 100644 index 000000000..968891d06 --- /dev/null +++ b/auth/cli-codegen/src/test/java/org/onap/policy/apex/auth/clicodegen/CliCodegenTest.java @@ -0,0 +1,419 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. All rights reserved. + * ================================================================================ + * 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 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.apex.auth.clicodegen; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileWriter; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import org.junit.Test; +import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey; +import org.onap.policy.apex.model.basicmodel.concepts.AxReferenceKey; +import org.onap.policy.apex.model.basicmodel.handling.ApexModelException; +import org.onap.policy.apex.model.basicmodel.handling.ApexModelReader; +import org.onap.policy.apex.model.contextmodel.concepts.AxContextAlbum; +import org.onap.policy.apex.model.contextmodel.concepts.AxContextSchema; +import org.onap.policy.apex.model.eventmodel.concepts.AxEvent; +import org.onap.policy.apex.model.eventmodel.concepts.AxField; +import org.onap.policy.apex.model.policymodel.concepts.AxPolicy; +import org.onap.policy.apex.model.policymodel.concepts.AxPolicyModel; +import org.onap.policy.apex.model.policymodel.concepts.AxState; +import org.onap.policy.apex.model.policymodel.concepts.AxStateFinalizerLogic; +import org.onap.policy.apex.model.policymodel.concepts.AxStateOutput; +import org.onap.policy.apex.model.policymodel.concepts.AxStateTaskReference; +import org.onap.policy.apex.model.policymodel.concepts.AxTask; +import org.onap.policy.apex.model.policymodel.concepts.AxTaskLogic; +import org.onap.policy.apex.model.policymodel.concepts.AxTaskParameter; +import org.onap.policy.apex.model.policymodel.concepts.AxTaskSelectionLogic; +import org.stringtemplate.v4.ST; + +/** + * Test CLI code generation. + */ +public class CliCodegenTest { + + private KeyInfoGetter kig; + private File outFile = null; + + @Test + public void test() throws IOException { + final CodeGeneratorCliEditor codeGen = new CodeGeneratorCliEditor(); + + outFile = File.createTempFile("ApexTestGenerated", ".apex"); + + ApexModelReader<AxPolicyModel> modelReader = null; + try { + modelReader = new ApexModelReader<>(AxPolicyModel.class); + } catch (ApexModelException e1) { + fail("test should not throw an exception"); + } + modelReader.setValidateFlag(false); + AxPolicyModel apexPolicyModel = null; + try { + apexPolicyModel = modelReader + .read(new FileInputStream(new File("src/test/resources/models/SamplePolicyModel.json"))); + } catch (ApexModelException | FileNotFoundException e) { + fail("test should not throw an exception"); + } + + assertEquals(0, generateCli(codeGen, apexPolicyModel)); + } + + /** + * Generate the CLI from the model. + * + * @param codeGen the code generator + * @param policyModel the policy model + * @throws IOException on generation exceptions + */ + private int generateCli(final CodeGeneratorCliEditor codeGen, final AxPolicyModel policyModel) throws IOException { + kig = new KeyInfoGetter(policyModel); + + // Order is important. 0: model, 1: context schemas, 2: tasks, 3: events, 4: ContextAlbums, 5: Policies + // 0: model + final AxArtifactKey pmkey = policyModel.getKey(); + codeGen.addModelParams(kig.getName(pmkey), kig.getVersion(pmkey), kig.getUuid(pmkey), kig.getDesc(pmkey)); + + // 1: Context Schemas + for (final AxContextSchema s : policyModel.getSchemas().getSchemasMap().values()) { + final AxArtifactKey key = s.getKey(); + + codeGen.addSchemaDeclaration(kig.getName(key), kig.getVersion(key), kig.getUuid(key), kig.getDesc(key), + s.getSchemaFlavour(), s.getSchema()); + } + + // 2: tasks + for (final AxTask t : policyModel.getTasks().getTaskMap().values()) { + final AxArtifactKey key = t.getKey(); + final List<ST> infields = getInfieldsForTask(codeGen, t); + final List<ST> outfields = getOutfieldsForTask(codeGen, t); + final ST logic = getLogicForTask(codeGen, t); + final List<ST> parameters = getParametersForTask(codeGen, t); + final List<ST> contextRefs = getCtxtRefsForTask(codeGen, t); + + codeGen.addTaskDeclaration(kig.getName(key), kig.getVersion(key), kig.getUuid(key), kig.getDesc(key), + infields, outfields, logic, parameters, contextRefs); + } + + // 3: events + for (final AxEvent e : policyModel.getEvents().getEventMap().values()) { + final AxArtifactKey key = e.getKey(); + final List<ST> fields = getParametersForEvent(codeGen, e); + + codeGen.addEventDeclaration(kig.getName(key), kig.getVersion(key), kig.getUuid(key), kig.getDesc(key), + e.getNameSpace(), e.getSource(), e.getTarget(), fields); + } + + // 4: context albums + for (final AxContextAlbum a : policyModel.getAlbums().getAlbumsMap().values()) { + final AxArtifactKey key = a.getKey(); + + codeGen.addContextAlbumDeclaration(kig.getName(key), kig.getVersion(key), kig.getUuid(key), + kig.getDesc(key), a.getScope(), a.isWritable(), kig.getName(a.getItemSchema()), + kig.getVersion(a.getItemSchema())); + } + + // 5: policies + for (final AxPolicy p : policyModel.getPolicies().getPolicyMap().values()) { + final AxArtifactKey key = p.getKey(); + final List<ST> states = getStatesForPolicy(codeGen, p); + codeGen.addPolicyDefinition(kig.getName(key), kig.getVersion(key), kig.getUuid(key), kig.getDesc(key), + p.getTemplate(), p.getFirstState(), states); + } + + final String out = codeGen.getModel().render(); + + FileWriter outFileWriter = new FileWriter(outFile); + outFileWriter.write(out); + outFileWriter.close(); + + return 0; + } + + /** + * Gets the parameters for event. + * + * @param cg the code generator + * @param event the event + * @return the parameters for event + */ + private List<ST> getParametersForEvent(final CodeGeneratorCliEditor cg, final AxEvent event) { + final Collection<AxField> fields = event.getFields(); + final List<ST> ret = new ArrayList<>(fields.size()); + for (final AxField f : fields) { + final AxReferenceKey fkey = f.getKey(); + + final ST val = cg.createEventFieldDefinition(kig.getPName(fkey), kig.getPVersion(fkey), kig.getLName(fkey), + kig.getName(f.getSchema()), kig.getVersion(f.getSchema()), f.getOptional()); + + ret.add(val); + } + return ret; + } + + /** + * Gets the context references for task. + * + * @param cg the code generator + * @param task the task + * @return the context references for task + */ + private List<ST> getCtxtRefsForTask(final CodeGeneratorCliEditor cg, final AxTask task) { + final Collection<AxArtifactKey> ctxs = task.getContextAlbumReferences(); + final List<ST> ret = new ArrayList<>(ctxs.size()); + final AxArtifactKey tkey = task.getKey(); + for (final AxArtifactKey ckey : ctxs) { + + final ST val = cg.createTaskDefinitionContextRef(kig.getName(tkey), kig.getVersion(tkey), kig.getName(ckey), + kig.getVersion(ckey)); + + ret.add(val); + } + return ret; + } + + /** + * Gets the parameters for task. + * + * @param cg the code generator + * @param task the task + * @return the parameters for task + */ + private List<ST> getParametersForTask(final CodeGeneratorCliEditor cg, final AxTask task) { + final Collection<AxTaskParameter> pars = task.getTaskParameters().values(); + final List<ST> ret = new ArrayList<>(pars.size()); + for (final AxTaskParameter p : pars) { + final AxReferenceKey pkey = p.getKey(); + + final ST val = cg.createTaskDefinitionParameters(kig.getPName(pkey), kig.getPVersion(pkey), + kig.getLName(pkey), p.getTaskParameterValue()); + + ret.add(val); + } + return ret; + } + + /** + * Gets the logic for task. + * + * @param cg the code generator + * @param task the task + * @return the logic for task + */ + private ST getLogicForTask(final CodeGeneratorCliEditor cg, final AxTask task) { + final AxArtifactKey tkey = task.getKey(); + final AxTaskLogic tl = task.getTaskLogic(); + + return cg.createTaskDefLogic(kig.getName(tkey), kig.getVersion(tkey), tl.getLogicFlavour(), tl.getLogic()); + } + + /** + * Gets the output fields for task. + * + * @param cg the code generator + * @param task the task + * @return the output fields for task + */ + private List<ST> getOutfieldsForTask(final CodeGeneratorCliEditor cg, final AxTask task) { + final Collection<? extends AxField> fields = task.getOutputFields().values(); + final List<ST> ret = new ArrayList<>(fields.size()); + for (final AxField f : fields) { + final AxReferenceKey fkey = f.getKey(); + + final ST val = cg.createTaskDefinitionOutfields(kig.getPName(fkey), kig.getPVersion(fkey), + kig.getLName(fkey), kig.getName(f.getSchema()), kig.getVersion(f.getSchema())); + + ret.add(val); + } + return ret; + } + + /** + * Gets the input fields for task. + * + * @param cg the code generator + * @param task the task + * @return the input fields for task + */ + private List<ST> getInfieldsForTask(final CodeGeneratorCliEditor cg, final AxTask task) { + final Collection<? extends AxField> fields = task.getInputFields().values(); + final List<ST> ret = new ArrayList<>(fields.size()); + for (final AxField f : fields) { + final AxReferenceKey fkey = f.getKey(); + + final ST val = cg.createTaskDefinitionInfields(kig.getPName(fkey), kig.getPVersion(fkey), + kig.getLName(fkey), kig.getName(f.getSchema()), kig.getVersion(f.getSchema())); + + ret.add(val); + } + return ret; + } + + /** + * Gets the states for policy. + * + * @param cg the code generator + * @param pol the policy + * @return the states for policy + */ + private List<ST> getStatesForPolicy(final CodeGeneratorCliEditor cg, final AxPolicy pol) { + final Collection<AxState> states = pol.getStateMap().values(); + final List<ST> ret = new ArrayList<>(states.size()); + for (final AxState st : states) { + final AxReferenceKey skey = st.getKey(); + final List<ST> outputs = getStateOutputsForState(cg, st); + final List<ST> finalizerLogics = getFinalizersForState(cg, st); + final List<ST> tasks = getTaskRefsForState(cg, st); + final List<ST> tsLogic = getTslForState(cg, st); + final List<ST> ctxRefs = getCtxtRefsForState(cg, st); + + final ST val = cg.createPolicyStateDef(kig.getPName(skey), kig.getPVersion(skey), kig.getLName(skey), + kig.getName(st.getTrigger()), kig.getVersion(st.getTrigger()), + kig.getName(st.getDefaultTask()), kig.getVersion(st.getDefaultTask()), outputs, tasks, + tsLogic, finalizerLogics, ctxRefs); + + ret.add(val); + } + return ret; + } + + /** + * Gets the finalizers for state. + * + * @param cg the code generator + * @param st the state + * @return the finalizers for state + */ + private List<ST> getFinalizersForState(final CodeGeneratorCliEditor cg, final AxState st) { + final Collection<AxStateFinalizerLogic> fins = st.getStateFinalizerLogicMap().values(); + final List<ST> ret = new ArrayList<>(fins.size()); + final AxReferenceKey skey = st.getKey(); + for (final AxStateFinalizerLogic fin : fins) { + final AxReferenceKey finkey = fin.getKey(); + + final ST val = cg.createPolicyStateDefFinalizerLogic(kig.getPName(skey), kig.getPVersion(skey), + kig.getLName(skey), kig.getLName(finkey), fin.getLogicFlavour(), fin.getLogic()); + + ret.add(val); + } + return ret; + } + + /** + * Gets the context references for state. + * + * @param cg the code generator + * @param st the state + * @return the context references for state + */ + private List<ST> getCtxtRefsForState(final CodeGeneratorCliEditor cg, final AxState st) { + final Collection<AxArtifactKey> ctxs = st.getContextAlbumReferences(); + final List<ST> ret = new ArrayList<>(ctxs.size()); + final AxReferenceKey skey = st.getKey(); + for (final AxArtifactKey ctx : ctxs) { + + final ST val = cg.createPolicyStateDefContextRef(kig.getPName(skey), kig.getPVersion(skey), + kig.getLName(skey), kig.getName(ctx), kig.getVersion(ctx)); + + ret.add(val); + } + return ret; + } + + /** + * Gets the Task Selection Logic for state. + * + * @param cg the code generator + * @param st the state + * @return the TSL for state (if any) in a list + */ + private List<ST> getTslForState(final CodeGeneratorCliEditor cg, final AxState st) { + final AxReferenceKey skey = st.getKey(); + if (st.checkSetTaskSelectionLogic()) { + final AxTaskSelectionLogic tsl = st.getTaskSelectionLogic(); + final ST val = cg.createPolicyStateDefTaskSelLogic(kig.getPName(skey), kig.getPVersion(skey), + kig.getLName(skey), tsl.getLogicFlavour(), tsl.getLogic()); + return Collections.singletonList(val); + } else { + return Collections.emptyList(); + } + } + + /** + * Gets the task references for state. + * + * @param cg the code generator + * @param st the state + * @return the task references for state + */ + private List<ST> getTaskRefsForState(final CodeGeneratorCliEditor cg, final AxState st) { + final Map<AxArtifactKey, AxStateTaskReference> taskrefs = st.getTaskReferences(); + final List<ST> ret = new ArrayList<>(taskrefs.size()); + final AxReferenceKey skey = st.getKey(); + for (final Entry<AxArtifactKey, AxStateTaskReference> e : taskrefs.entrySet()) { + final AxArtifactKey tkey = e.getKey(); + final AxStateTaskReference tr = e.getValue(); + final AxReferenceKey trkey = tr.getKey(); + + final ST val = cg.createPolicyStateTask(kig.getPName(skey), kig.getPVersion(skey), kig.getLName(skey), + kig.getLName(trkey), kig.getName(tkey), kig.getVersion(tkey), + tr.getStateTaskOutputType().name(), kig.getLName(tr.getOutput())); + + ret.add(val); + } + return ret; + } + + /** + * Gets the state outputs for state. + * + * @param cg the code generator + * @param st the state + * @return the state outputs for state + */ + private List<ST> getStateOutputsForState(final CodeGeneratorCliEditor cg, final AxState st) { + final Collection<AxStateOutput> outs = st.getStateOutputs().values(); + final List<ST> ret = new ArrayList<>(outs.size()); + final AxReferenceKey skey = st.getKey(); + for (final AxStateOutput out : outs) { + final AxReferenceKey outkey = out.getKey(); + + final ST val = cg.createPolicyStateOutput(kig.getPName(skey), kig.getPVersion(skey), kig.getLName(skey), + kig.getLName(outkey), kig.getName(out.getOutgingEvent()), + kig.getVersion(out.getOutgingEvent()), kig.getLName(out.getNextState())); + + ret.add(val); + } + return ret; + } + +} diff --git a/auth/cli-codegen/src/test/java/org/onap/policy/apex/auth/clicodegen/KeyInfoGetter.java b/auth/cli-codegen/src/test/java/org/onap/policy/apex/auth/clicodegen/KeyInfoGetter.java new file mode 100644 index 000000000..97d05679c --- /dev/null +++ b/auth/cli-codegen/src/test/java/org/onap/policy/apex/auth/clicodegen/KeyInfoGetter.java @@ -0,0 +1,159 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2016-2018 Ericsson. All rights reserved. + * ================================================================================ + * 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 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.apex.auth.clicodegen; + +import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey; +import org.onap.policy.apex.model.basicmodel.concepts.AxKeyInfo; +import org.onap.policy.apex.model.basicmodel.concepts.AxReferenceKey; +import org.onap.policy.apex.model.policymodel.concepts.AxPolicyModel; + +/** + * Getter methods for policy keys. + * + * @author John Keeney (john.keeney@ericsson.com) + */ + +public class KeyInfoGetter { + + /** The policy model for the getters. */ + private final AxPolicyModel model; + + /** + * Creates a new key getter. + * + * @param model the policy model to use + */ + public KeyInfoGetter(final AxPolicyModel model) { + this.model = model; + } + + /** + * Returns the key name as string. + * + * @param key the key to transform + * @return key name as string, null if key was null + */ + public String getName(final AxArtifactKey key) { + if (key == null) { + return null; + } + return key.getName(); + } + + /** + * Returns the version of an artifact key. + * + * @param key the key to extract version from + * @return version of the key, null if key was null + */ + public String getVersion(final AxArtifactKey key) { + if (key == null) { + return null; + } + return key.getVersion(); + } + + /** + * Returns the parent name for the key. + * + * @param key the key to process + * @return parent name, null if key was null + */ + public String getPName(final AxReferenceKey key) { + if (key == null) { + return null; + } + return key.getParentKeyName(); + } + + /** + * Returns the parent version for the key. + * + * @param key the key to process + * @return parent version, null if key was null + */ + public String getPVersion(final AxReferenceKey key) { + if (key == null) { + return null; + } + return key.getParentKeyVersion(); + } + + /** + * Returns the local name for the key. + * + * @param key the key to process + * @return local name, null if key was null + */ + public String getLName(final AxReferenceKey key) { + if (key == null) { + return null; + } + return key.getLocalName(); + } + + /** + * Returns the local name of the parent for the key. + * + * @param key the key to process + * @return local name of the parent, null if key was null + */ + public String getPlName(final AxReferenceKey key) { + if (key == null) { + return null; + } + return key.getParentLocalName(); + } + + /** + * Returns the UUID of an artifact key. + * + * @param key the key to extract version from + * @return UUID of the key, null if key was null + */ + public String getUuid(final AxArtifactKey key) { + if (key == null) { + return null; + } + final AxKeyInfo ki = model.getKeyInformation().get(key); + if (ki == null || ki.getUuid() == null) { + return null; + } + return ki.getUuid().toString(); + } + + /** + * Returns the description of an artifact key. + * + * @param key the key to extract version from + * @return description of the key, null if key was null + */ + public String getDesc(final AxArtifactKey key) { + if (key == null) { + return null; + } + final AxKeyInfo ki = model.getKeyInformation().get(key); + if (ki == null || ki.getDescription() == null) { + return null; + } + return ki.getDescription(); + } +} |