From ea0cc3b668157ee4af1cc40bdcb12066c0289c44 Mon Sep 17 00:00:00 2001
From: dontenvi <pierre.dontenville@eurecom.fr>
Date: Tue, 9 Jan 2024 12:12:36 -0500
Subject: [PATCH] random id solution in test

---
 .../tmltranslator/toavatarsec/TML2Avatar.java |  18 +-
 .../tmltranslator/DiplodocusSecurityTest.java | 106 +++---
 .../Models/ITA01_v5/mapAtt/golden             |   5 +
 .../Models/ITA01_v5/mapAtt/spec.tarchi        | 335 +++++++++++++++++
 .../Models/ITA01_v5/mapAtt/spec.tmap          | 110 ++++++
 .../Models/ITA01_v5/mapAtt/spec.tml           | 338 +++++++++++++++++
 .../Models/ITA01_v5/mapNoProtection/golden    |   0
 .../ITA01_v5/mapNoProtection/spec.tarchi      | 354 ++++++++++++++++++
 .../Models/ITA01_v5/mapNoProtection/spec.tmap |  36 ++
 .../Models/ITA01_v5/mapNoProtection/spec.tml  | 338 +++++++++++++++++
 10 files changed, 1582 insertions(+), 58 deletions(-)
 create mode 100644 ttool/src/test/resources/tmltranslator/DiplodocusSecurityTest/Models/ITA01_v5/mapAtt/golden
 create mode 100644 ttool/src/test/resources/tmltranslator/DiplodocusSecurityTest/Models/ITA01_v5/mapAtt/spec.tarchi
 create mode 100644 ttool/src/test/resources/tmltranslator/DiplodocusSecurityTest/Models/ITA01_v5/mapAtt/spec.tmap
 create mode 100644 ttool/src/test/resources/tmltranslator/DiplodocusSecurityTest/Models/ITA01_v5/mapAtt/spec.tml
 create mode 100644 ttool/src/test/resources/tmltranslator/DiplodocusSecurityTest/Models/ITA01_v5/mapNoProtection/golden
 create mode 100644 ttool/src/test/resources/tmltranslator/DiplodocusSecurityTest/Models/ITA01_v5/mapNoProtection/spec.tarchi
 create mode 100644 ttool/src/test/resources/tmltranslator/DiplodocusSecurityTest/Models/ITA01_v5/mapNoProtection/spec.tmap
 create mode 100644 ttool/src/test/resources/tmltranslator/DiplodocusSecurityTest/Models/ITA01_v5/mapNoProtection/spec.tml

diff --git a/src/main/java/tmltranslator/toavatarsec/TML2Avatar.java b/src/main/java/tmltranslator/toavatarsec/TML2Avatar.java
index 54912cb5ae..b7b29a887b 100644
--- a/src/main/java/tmltranslator/toavatarsec/TML2Avatar.java
+++ b/src/main/java/tmltranslator/toavatarsec/TML2Avatar.java
@@ -2480,15 +2480,17 @@ public class TML2Avatar {
         }
         
         for (SecurityPattern sp : keysPublicBus) {
-            for (TMLTask taskPattern : tmlmodel.securityTaskMap.get(sp)) {
-                AvatarBlock b = taskBlockMap.get(taskPattern);
-                AvatarAttribute attrib = b.getAvatarAttributeWithName("key_"+sp.getName());
-                if (attrib!=null) {
-                    LinkedList<AvatarAttribute> arguments = new LinkedList<AvatarAttribute>();
-                    arguments.add(attrib);
-                    avspec.addPragma(new AvatarPragmaPublic("#Public " + b.getName() + "." + attrib.getName(), null, arguments));
+            if (tmlmodel.securityTaskMap.get(sp) != null) {
+                for (TMLTask taskPattern : tmlmodel.securityTaskMap.get(sp)) {
+                    AvatarBlock b = taskBlockMap.get(taskPattern);
+                    AvatarAttribute attrib = b.getAvatarAttributeWithName("key_" + sp.getName());
+                    if (attrib != null) {
+                        LinkedList<AvatarAttribute> arguments = new LinkedList<AvatarAttribute>();
+                        arguments.add(attrib);
+                        avspec.addPragma(new AvatarPragmaPublic("#Public " + b.getName() + "." + attrib.getName(), null, arguments));
+                    }
+
                 }
-                
             }
         }
         for (SecurityPattern sp : pubKeys.keySet()) {
diff --git a/ttool/src/test/java/tmltranslator/DiplodocusSecurityTest.java b/ttool/src/test/java/tmltranslator/DiplodocusSecurityTest.java
index 99edab6c39..106e59acde 100644
--- a/ttool/src/test/java/tmltranslator/DiplodocusSecurityTest.java
+++ b/ttool/src/test/java/tmltranslator/DiplodocusSecurityTest.java
@@ -40,11 +40,10 @@ public class DiplodocusSecurityTest extends AbstractTest {
     private static final String PROVERIF_QUERY = "Query";
     static String PROVERIF_DIR;
     static String MODELS_DIR;
-    private static HashMap<String, Pair<String, Boolean>> seenCommMap;
-    //Comm id as Key. String value is for left or right. Boolean value is for
-    // checking if this comm id as already been map or not.
-    //Hypothesis : Comm id cant be both left and right.
-    private static HashMap<String, String> commMap;
+    private static HashMap<String, String> alreadyMapComm;
+    //Map id in Proverif result with id in golden queries
+    final static String LEFT ="left";
+    final static String RIGHT ="right";
 
 
 
@@ -67,15 +66,15 @@ public class DiplodocusSecurityTest extends AbstractTest {
         currentModel = model;
         currentTabs = tabs;
         goldenMap = new HashMap<>();
-        seenCommMap = new HashMap<>();
-        commMap = new HashMap<>();
+        alreadyMapComm = new HashMap<>();
     }
 
     @Parameterized.Parameters(name = "{index}: {0}")
     public static Collection models(){
         return Arrays.asList(new Object[][] {
+//                {"AliceAndBobHW", new ArrayList<>(Arrays.asList("KeyExchange"))}, //the tab which include ID issue in golden
                 {"AliceAndBobHW", new ArrayList<>(Arrays.asList("SymmetricExchange", "Nonce",  "KeyExchange", "Mac", "SampleAutoSec"))},
-                {"AliceAndBobHW", new ArrayList<>(Arrays.asList("SymmetricExchange", "Nonce",  "KeyExchange", "Mac", "SampleAutoSec"))}
+                {"ITA01_v5", new ArrayList<>(Arrays.asList("mapAtt", "mapNoProtection"))}
         });
     }
 
@@ -137,7 +136,6 @@ public class DiplodocusSecurityTest extends AbstractTest {
                 for (TMLError error: syntax.getErrors()) {
                     System.out.println("Error: " + error.toString());
                 }
-
             }
 
             assertTrue(syntax.hasErrors() == 0);
@@ -165,23 +163,27 @@ public class DiplodocusSecurityTest extends AbstractTest {
             String cmd = "proverif -in pitype " + PROVERIF_DIR + pvspecFilename;
             boolean summaryFound = false;
 
-            commMap.clear();
-            seenCommMap.clear();
-            buildCommMap(tab);
+            alreadyMapComm.clear();
 
             try {
                 proc = Runtime.getRuntime().exec(cmd);
                 proc_in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
                 int nbLines =0;
+
+                if (goldenMap.get(tab) == null){
+                    TraceManager.addDev("The golden for : " + tab + " is null");
+                    fail();
+                }
+
                 while ((str = proc_in.readLine()) != null) {
                     // TraceManager.addDev( "Sending " + str + " from " + port + " to client..." );
 
                     System.out.println("Output from ProVerif: " + str);
 
                     if (summaryFound && (str.contains(PROVERIF_QUERY))) {
+                        assertTrue(goldenMap.get(tab).length > nbLines);
+                        assertTrue(equals(goldenMap.get(tab)[nbLines], str));
                         nbLines++;
-                        str = changeCommId(str);
-                        assertTrue(contains(tab, str));
                     }
 
                     if (str.contains(PROVERIF_SUMMARY)) {
@@ -199,53 +201,56 @@ public class DiplodocusSecurityTest extends AbstractTest {
         TraceManager.addDev("Test for " + currentModel + " model is ended");
     }
 
-    private boolean contains(String tab, String str) {
+    private boolean equals(String line, String str) {
         str = str.trim();
-        if (goldenMap.get(tab) == null){
-            TraceManager.addDev("The golden for : " + tab + " is null");
-            return false;
+
+        if (str.startsWith(line.trim()) && !line.trim().isEmpty()) {
+            TraceManager.addDev( "\"" + str + "\"" + " is in golden");
+            return true;
         }
 
-        for(String s: goldenMap.get(tab)) {
+        String cleanStr = str.replaceAll("comm[0-9]+","comm");
+        String cleanLine = line.replaceAll("comm[0-9]+","comm");
 
-            if (str.startsWith(s.trim())&& !s.trim().isEmpty()) {
-                TraceManager.addDev( "\"" + str + "\"" + " is in golden");
-                return true;
-            }
+        if (!cleanStr.startsWith(cleanLine.trim()) || cleanLine.trim().isEmpty()){
+            TraceManager.addDev("\"" + str + "\"" +  " not in golden");
+            return false;
+        }
+
+        String changedStr = replaceCommId(line, str);
+        if (changedStr.startsWith(line.trim()) && !line.trim().isEmpty()) {
+            TraceManager.addDev( "\"" + changedStr + "\"" + " is in golden");
+            return true;
         }
+
         TraceManager.addDev("\"" + str + "\"" +  " not in golden");
         return false;
     }
 
-    private void buildCommMap(String tab){
-        for(String query: goldenMap.get(tab)) {
-            TraceManager.addDev(String.valueOf(query.matches(".*comm[0-9]+.*")));
-            for (Pair<String,Pair<String,Boolean>> comm: getComms(query)) {
-                seenCommMap.put(comm.getFirst(),comm.getSecond());
-            }
+    private String replaceCommId(String line, String str) {
+        String newStr = str;
+        ArrayList<Pair<String, String>> lineComms = findComms(line);
+        ArrayList<Pair<String, String>> strComms = findComms(str);
+        if (lineComms.size()!=strComms.size()){
+            return newStr;
         }
-        TraceManager.addDev("seenCommMap for " + tab +" :" + seenCommMap.toString());
-    }
 
-    private String changeCommId(String query) {
-        for (Pair<String,Pair<String,Boolean>> comm: getComms(query)) {
-            if (!commMap.containsKey(comm.getFirst())){ //comm id of the query generated by proverif
-                String position = comm.getSecond().getFirst(); //left or right
-                for (String goldenId : seenCommMap.keySet()){
-                    if (position.equals(seenCommMap.get(goldenId).getFirst()) && !seenCommMap.get(goldenId).getSecond()){
-                        seenCommMap.put(goldenId,new Pair<>(position,true));
-                        commMap.put(comm.getFirst(),goldenId);
-                    }
-                }
+        for (int i = 0; i < lineComms.size(); i++) {
+            String currentIdStr = strComms.get(i).getFirst();
+            if (alreadyMapComm.containsKey(currentIdStr)){
+                newStr = newStr.replaceAll(currentIdStr,alreadyMapComm.get(currentIdStr));
+            }else{
+                newStr = newStr.replaceAll(currentIdStr,lineComms.get(i).getFirst());
+                alreadyMapComm.put(currentIdStr,lineComms.get(i).getFirst());
             }
-            query = query.replaceAll(comm.getFirst(),commMap.get(comm.getFirst()));
-            TraceManager.addDev(comm.getFirst() + " has been replaced by " + commMap.get(comm.getFirst()));
+            TraceManager.addDev("\"" + currentIdStr + "\"" +  " has been replaced by " + "\"" + alreadyMapComm.get(currentIdStr) + "\"");
         }
-        return query;
+        return newStr;
     }
-    private ArrayList<Pair<String,
- Pair<String, Boolean>>> getComms(String query){
-        ArrayList<Pair<String, Pair<String, Boolean>>> comms = new ArrayList<>();
+
+
+    private ArrayList<Pair<String, String>> findComms(String query){
+        ArrayList<Pair<String, String>> comms = new ArrayList<>();
         if (query.contains("==>") && query.matches(".*comm[0-9]+.*")) {
             int index = query.indexOf("==>");
             int lookingIndex = 0; //current query substring index
@@ -265,11 +270,11 @@ public class DiplodocusSecurityTest extends AbstractTest {
                     idUnit = "" + query.charAt(queryIndex + incr);
                     incr += 1;
                 }
-                String position = "left";
+                String position = LEFT;
                 if (queryIndex > index) {
-                    position = "right";
+                    position = RIGHT;
                 }
-                comms.add(new Pair<>(id.toString(), new Pair<>(position, false)));
+                comms.add(new Pair<>(id.toString(), position));
                 m = p.matcher(query.substring(queryIndex));
 
             }
@@ -277,4 +282,5 @@ public class DiplodocusSecurityTest extends AbstractTest {
         }
         return comms;
     }
+
 }
diff --git a/ttool/src/test/resources/tmltranslator/DiplodocusSecurityTest/Models/ITA01_v5/mapAtt/golden b/ttool/src/test/resources/tmltranslator/DiplodocusSecurityTest/Models/ITA01_v5/mapAtt/golden
new file mode 100644
index 0000000000..f549761872
--- /dev/null
+++ b/ttool/src/test/resources/tmltranslator/DiplodocusSecurityTest/Models/ITA01_v5/mapAtt/golden
@@ -0,0 +1,5 @@
+Query not attacker(BatterySensor___Application__battery_chData[!1 = v]) is true.
+Query not attacker(PumpController___Application__feedback4App_chData[!1 = v]) is true.
+Query not attacker(SmartphoneAppController___Application__emergencySign_chData[!1 = v]) is true.
+Query inj-event(authenticity___MedicalInformationSystem___emergencySign_chData___aftersignalstate_Application_emergencySign_Application_emergencySign(dummyM)) ==> inj-event(authenticity___SmartphoneAppController___emergencySign_chData___signalstate_Application_emergencySign_Application_emergencySign(dummyM)) is true.
+Query inj-event(authenticity___SmartphoneAppController___feedback4App_chData___aftersignalstate_Application_feedback4App_Application_feedback4App(dummyM)) ==> inj-event(authenticity___PumpController___feedback4App_chData___signalstate_Application_feedback4App_Application_feedback4App(dummyM)) is false.
diff --git a/ttool/src/test/resources/tmltranslator/DiplodocusSecurityTest/Models/ITA01_v5/mapAtt/spec.tarchi b/ttool/src/test/resources/tmltranslator/DiplodocusSecurityTest/Models/ITA01_v5/mapAtt/spec.tarchi
new file mode 100644
index 0000000000..a40efcbba4
--- /dev/null
+++ b/ttool/src/test/resources/tmltranslator/DiplodocusSecurityTest/Models/ITA01_v5/mapAtt/spec.tarchi
@@ -0,0 +1,335 @@
+// Master clock frequency - in MHz
+MASTERCLOCKFREQUENCY 200
+
+NODE CPU PumpActuatorMCU
+SET PumpActuatorMCU nbOfCores 1
+SET PumpActuatorMCU byteDataSize 4
+SET PumpActuatorMCU pipelineSize 5
+SET PumpActuatorMCU goIdleTime 10
+SET PumpActuatorMCU maxConsecutiveIdleCycles 10
+SET PumpActuatorMCU taskSwitchingTime 20
+SET PumpActuatorMCU branchingPredictionPenalty 2
+SET PumpActuatorMCU cacheMiss 5
+SET PumpActuatorMCU schedulingPolicy 0
+SET PumpActuatorMCU sliceTime 10000
+SET PumpActuatorMCU execiTime 1
+SET PumpActuatorMCU execcTime 1
+SET PumpActuatorMCU clockDivider 1
+
+NODE BUS BT
+SET BT byteDataSize 4
+SET BT pipelineSize 1
+SET BT arbitration 0
+SET BT sliceTime 10000
+SET BT burstSize 100
+SET BT privacy private
+SET BT clockDivider 1
+
+NODE MEMORY MedicalMemory
+SET MedicalMemory byteDataSize 4
+SET MedicalMemory clockDivider 1
+
+NODE CPU MedicalCPU
+SET MedicalCPU nbOfCores 1
+SET MedicalCPU byteDataSize 4
+SET MedicalCPU pipelineSize 5
+SET MedicalCPU goIdleTime 10
+SET MedicalCPU maxConsecutiveIdleCycles 10
+SET MedicalCPU taskSwitchingTime 20
+SET MedicalCPU branchingPredictionPenalty 2
+SET MedicalCPU cacheMiss 5
+SET MedicalCPU schedulingPolicy 0
+SET MedicalCPU sliceTime 10000
+SET MedicalCPU execiTime 1
+SET MedicalCPU execcTime 1
+SET MedicalCPU clockDivider 1
+
+NODE BUS MedicalBus
+SET MedicalBus byteDataSize 4
+SET MedicalBus pipelineSize 1
+SET MedicalBus arbitration 0
+SET MedicalBus sliceTime 10000
+SET MedicalBus burstSize 100
+SET MedicalBus privacy private
+SET MedicalBus clockDivider 1
+
+NODE BRIDGE MedicalBridge
+SET MedicalBridge bufferByteSize 4
+SET MedicalBridge clockDivider 1
+
+NODE BUS MedicalIOBus
+SET MedicalIOBus byteDataSize 4
+SET MedicalIOBus pipelineSize 1
+SET MedicalIOBus arbitration 0
+SET MedicalIOBus sliceTime 10000
+SET MedicalIOBus burstSize 100
+SET MedicalIOBus privacy private
+SET MedicalIOBus clockDivider 1
+
+NODE BRIDGE MedicalNetwork
+SET MedicalNetwork bufferByteSize 4
+SET MedicalNetwork clockDivider 1
+
+NODE MEMORY SmartphoneMemory
+SET SmartphoneMemory byteDataSize 4
+SET SmartphoneMemory clockDivider 1
+
+NODE BUS SmartphoneBus
+SET SmartphoneBus byteDataSize 4
+SET SmartphoneBus pipelineSize 1
+SET SmartphoneBus arbitration 0
+SET SmartphoneBus sliceTime 10000
+SET SmartphoneBus burstSize 100
+SET SmartphoneBus privacy private
+SET SmartphoneBus clockDivider 1
+
+NODE BRIDGE SmartphoneBridge
+SET SmartphoneBridge bufferByteSize 4
+SET SmartphoneBridge clockDivider 1
+
+NODE BRIDGE SmartphoneNetwork
+SET SmartphoneNetwork bufferByteSize 4
+SET SmartphoneNetwork clockDivider 1
+
+NODE BUS SmartphoneIOBus
+SET SmartphoneIOBus byteDataSize 4
+SET SmartphoneIOBus pipelineSize 1
+SET SmartphoneIOBus arbitration 0
+SET SmartphoneIOBus sliceTime 10000
+SET SmartphoneIOBus burstSize 100
+SET SmartphoneIOBus privacy private
+SET SmartphoneIOBus clockDivider 1
+
+NODE BRIDGE PumpNetwork
+SET PumpNetwork bufferByteSize 4
+SET PumpNetwork clockDivider 1
+
+NODE CPU ReservoirSensorMCU
+SET ReservoirSensorMCU nbOfCores 1
+SET ReservoirSensorMCU byteDataSize 4
+SET ReservoirSensorMCU pipelineSize 5
+SET ReservoirSensorMCU goIdleTime 10
+SET ReservoirSensorMCU maxConsecutiveIdleCycles 10
+SET ReservoirSensorMCU taskSwitchingTime 20
+SET ReservoirSensorMCU branchingPredictionPenalty 2
+SET ReservoirSensorMCU cacheMiss 5
+SET ReservoirSensorMCU schedulingPolicy 0
+SET ReservoirSensorMCU sliceTime 10000
+SET ReservoirSensorMCU execiTime 1
+SET ReservoirSensorMCU execcTime 1
+SET ReservoirSensorMCU clockDivider 1
+
+NODE CPU BatterySensorMCU
+SET BatterySensorMCU nbOfCores 1
+SET BatterySensorMCU byteDataSize 4
+SET BatterySensorMCU pipelineSize 5
+SET BatterySensorMCU goIdleTime 10
+SET BatterySensorMCU maxConsecutiveIdleCycles 10
+SET BatterySensorMCU taskSwitchingTime 20
+SET BatterySensorMCU branchingPredictionPenalty 2
+SET BatterySensorMCU cacheMiss 5
+SET BatterySensorMCU schedulingPolicy 0
+SET BatterySensorMCU sliceTime 10000
+SET BatterySensorMCU execiTime 1
+SET BatterySensorMCU execcTime 1
+SET BatterySensorMCU clockDivider 1
+
+NODE MEMORY PumpMemory
+SET PumpMemory byteDataSize 4
+SET PumpMemory clockDivider 1
+
+NODE CPU PumpProcessor
+SET PumpProcessor nbOfCores 1
+SET PumpProcessor byteDataSize 4
+SET PumpProcessor pipelineSize 5
+SET PumpProcessor goIdleTime 10
+SET PumpProcessor maxConsecutiveIdleCycles 10
+SET PumpProcessor taskSwitchingTime 20
+SET PumpProcessor branchingPredictionPenalty 2
+SET PumpProcessor cacheMiss 5
+SET PumpProcessor schedulingPolicy 0
+SET PumpProcessor sliceTime 10000
+SET PumpProcessor execiTime 1
+SET PumpProcessor execcTime 1
+SET PumpProcessor clockDivider 1
+
+NODE CPU GlucoseSensorMCU
+SET GlucoseSensorMCU nbOfCores 1
+SET GlucoseSensorMCU byteDataSize 4
+SET GlucoseSensorMCU pipelineSize 5
+SET GlucoseSensorMCU goIdleTime 10
+SET GlucoseSensorMCU maxConsecutiveIdleCycles 10
+SET GlucoseSensorMCU taskSwitchingTime 20
+SET GlucoseSensorMCU branchingPredictionPenalty 2
+SET GlucoseSensorMCU cacheMiss 5
+SET GlucoseSensorMCU schedulingPolicy 0
+SET GlucoseSensorMCU sliceTime 10000
+SET GlucoseSensorMCU execiTime 1
+SET GlucoseSensorMCU execcTime 1
+SET GlucoseSensorMCU clockDivider 1
+
+NODE BUS InterconnectionNetwork
+SET InterconnectionNetwork byteDataSize 4
+SET InterconnectionNetwork pipelineSize 1
+SET InterconnectionNetwork arbitration 0
+SET InterconnectionNetwork sliceTime 10000
+SET InterconnectionNetwork burstSize 100
+SET InterconnectionNetwork privacy public
+SET InterconnectionNetwork clockDivider 1
+
+NODE CPU SmartphoneCPU
+SET SmartphoneCPU nbOfCores 1
+SET SmartphoneCPU byteDataSize 4
+SET SmartphoneCPU pipelineSize 5
+SET SmartphoneCPU goIdleTime 10
+SET SmartphoneCPU maxConsecutiveIdleCycles 10
+SET SmartphoneCPU taskSwitchingTime 20
+SET SmartphoneCPU branchingPredictionPenalty 2
+SET SmartphoneCPU cacheMiss 5
+SET SmartphoneCPU schedulingPolicy 0
+SET SmartphoneCPU sliceTime 10000
+SET SmartphoneCPU execiTime 1
+SET SmartphoneCPU execcTime 1
+SET SmartphoneCPU clockDivider 1
+
+NODE BUS PumpBus
+SET PumpBus byteDataSize 4
+SET PumpBus pipelineSize 1
+SET PumpBus arbitration 0
+SET PumpBus sliceTime 10000
+SET PumpBus burstSize 100
+SET PumpBus privacy private
+SET PumpBus clockDivider 1
+
+NODE BRIDGE toPumpIOBus
+SET toPumpIOBus bufferByteSize 4
+SET toPumpIOBus clockDivider 1
+
+NODE BUS PumpIOBus
+SET PumpIOBus byteDataSize 1
+SET PumpIOBus pipelineSize 1
+SET PumpIOBus arbitration 0
+SET PumpIOBus sliceTime 10000
+SET PumpIOBus burstSize 100
+SET PumpIOBus privacy private
+SET PumpIOBus clockDivider 1
+
+NODE BRIDGE SmartphoneBTInterface
+SET SmartphoneBTInterface bufferByteSize 4
+SET SmartphoneBTInterface clockDivider 1
+
+NODE CPU DisplayMCU
+SET DisplayMCU nbOfCores 1
+SET DisplayMCU byteDataSize 4
+SET DisplayMCU pipelineSize 5
+SET DisplayMCU goIdleTime 10
+SET DisplayMCU maxConsecutiveIdleCycles 10
+SET DisplayMCU taskSwitchingTime 20
+SET DisplayMCU branchingPredictionPenalty 2
+SET DisplayMCU cacheMiss 5
+SET DisplayMCU schedulingPolicy 0
+SET DisplayMCU sliceTime 10000
+SET DisplayMCU execiTime 1
+SET DisplayMCU execcTime 1
+SET DisplayMCU clockDivider 1
+
+NODE LINK link_SmartphoneNetwork_to_InterconnectionNetwork
+SET link_SmartphoneNetwork_to_InterconnectionNetwork node SmartphoneNetwork
+SET link_SmartphoneNetwork_to_InterconnectionNetwork bus InterconnectionNetwork
+SET link_SmartphoneNetwork_to_InterconnectionNetwork priority 0
+NODE LINK link_PumpNetwork_to_InterconnectionNetwork
+SET link_PumpNetwork_to_InterconnectionNetwork node PumpNetwork
+SET link_PumpNetwork_to_InterconnectionNetwork bus InterconnectionNetwork
+SET link_PumpNetwork_to_InterconnectionNetwork priority 0
+NODE LINK link_PumpNetwork_to_PumpIOBus
+SET link_PumpNetwork_to_PumpIOBus node PumpNetwork
+SET link_PumpNetwork_to_PumpIOBus bus PumpIOBus
+SET link_PumpNetwork_to_PumpIOBus priority 0
+NODE LINK link_ReservoirSensorMCU_to_PumpIOBus
+SET link_ReservoirSensorMCU_to_PumpIOBus node ReservoirSensorMCU
+SET link_ReservoirSensorMCU_to_PumpIOBus bus PumpIOBus
+SET link_ReservoirSensorMCU_to_PumpIOBus priority 0
+NODE LINK link_BatterySensorMCU_to_PumpIOBus
+SET link_BatterySensorMCU_to_PumpIOBus node BatterySensorMCU
+SET link_BatterySensorMCU_to_PumpIOBus bus PumpIOBus
+SET link_BatterySensorMCU_to_PumpIOBus priority 0
+NODE LINK link_toPumpIOBus_to_PumpIOBus
+SET link_toPumpIOBus_to_PumpIOBus node toPumpIOBus
+SET link_toPumpIOBus_to_PumpIOBus bus PumpIOBus
+SET link_toPumpIOBus_to_PumpIOBus priority 0
+NODE LINK link_toPumpIOBus_to_PumpBus
+SET link_toPumpIOBus_to_PumpBus node toPumpIOBus
+SET link_toPumpIOBus_to_PumpBus bus PumpBus
+SET link_toPumpIOBus_to_PumpBus priority 0
+NODE LINK link_PumpProcessor_to_PumpBus
+SET link_PumpProcessor_to_PumpBus node PumpProcessor
+SET link_PumpProcessor_to_PumpBus bus PumpBus
+SET link_PumpProcessor_to_PumpBus priority 0
+NODE LINK link_PumpMemory_to_PumpBus
+SET link_PumpMemory_to_PumpBus node PumpMemory
+SET link_PumpMemory_to_PumpBus bus PumpBus
+SET link_PumpMemory_to_PumpBus priority 0
+NODE LINK link_SmartphoneNetwork_to_SmartphoneIOBus
+SET link_SmartphoneNetwork_to_SmartphoneIOBus node SmartphoneNetwork
+SET link_SmartphoneNetwork_to_SmartphoneIOBus bus SmartphoneIOBus
+SET link_SmartphoneNetwork_to_SmartphoneIOBus priority 0
+NODE LINK link_DisplayMCU_to_SmartphoneIOBus
+SET link_DisplayMCU_to_SmartphoneIOBus node DisplayMCU
+SET link_DisplayMCU_to_SmartphoneIOBus bus SmartphoneIOBus
+SET link_DisplayMCU_to_SmartphoneIOBus priority 0
+NODE LINK link_SmartphoneBridge_to_SmartphoneIOBus
+SET link_SmartphoneBridge_to_SmartphoneIOBus node SmartphoneBridge
+SET link_SmartphoneBridge_to_SmartphoneIOBus bus SmartphoneIOBus
+SET link_SmartphoneBridge_to_SmartphoneIOBus priority 0
+NODE LINK link_SmartphoneBridge_to_SmartphoneBus
+SET link_SmartphoneBridge_to_SmartphoneBus node SmartphoneBridge
+SET link_SmartphoneBridge_to_SmartphoneBus bus SmartphoneBus
+SET link_SmartphoneBridge_to_SmartphoneBus priority 0
+NODE LINK link_SmartphoneCPU_to_SmartphoneBus
+SET link_SmartphoneCPU_to_SmartphoneBus node SmartphoneCPU
+SET link_SmartphoneCPU_to_SmartphoneBus bus SmartphoneBus
+SET link_SmartphoneCPU_to_SmartphoneBus priority 0
+NODE LINK link_SmartphoneMemory_to_SmartphoneBus
+SET link_SmartphoneMemory_to_SmartphoneBus node SmartphoneMemory
+SET link_SmartphoneMemory_to_SmartphoneBus bus SmartphoneBus
+SET link_SmartphoneMemory_to_SmartphoneBus priority 0
+NODE LINK link_MedicalNetwork_to_InterconnectionNetwork
+SET link_MedicalNetwork_to_InterconnectionNetwork node MedicalNetwork
+SET link_MedicalNetwork_to_InterconnectionNetwork bus InterconnectionNetwork
+SET link_MedicalNetwork_to_InterconnectionNetwork priority 0
+NODE LINK link_MedicalNetwork_to_MedicalIOBus
+SET link_MedicalNetwork_to_MedicalIOBus node MedicalNetwork
+SET link_MedicalNetwork_to_MedicalIOBus bus MedicalIOBus
+SET link_MedicalNetwork_to_MedicalIOBus priority 0
+NODE LINK link_MedicalBridge_to_MedicalIOBus
+SET link_MedicalBridge_to_MedicalIOBus node MedicalBridge
+SET link_MedicalBridge_to_MedicalIOBus bus MedicalIOBus
+SET link_MedicalBridge_to_MedicalIOBus priority 0
+NODE LINK link_MedicalBridge_to_MedicalBus
+SET link_MedicalBridge_to_MedicalBus node MedicalBridge
+SET link_MedicalBridge_to_MedicalBus bus MedicalBus
+SET link_MedicalBridge_to_MedicalBus priority 0
+NODE LINK link_MedicalCPU_to_MedicalBus
+SET link_MedicalCPU_to_MedicalBus node MedicalCPU
+SET link_MedicalCPU_to_MedicalBus bus MedicalBus
+SET link_MedicalCPU_to_MedicalBus priority 0
+NODE LINK link_MedicalMemory_to_MedicalBus
+SET link_MedicalMemory_to_MedicalBus node MedicalMemory
+SET link_MedicalMemory_to_MedicalBus bus MedicalBus
+SET link_MedicalMemory_to_MedicalBus priority 0
+NODE LINK link_SmartphoneBTInterface_to_BT
+SET link_SmartphoneBTInterface_to_BT node SmartphoneBTInterface
+SET link_SmartphoneBTInterface_to_BT bus BT
+SET link_SmartphoneBTInterface_to_BT priority 0
+NODE LINK link_PumpActuatorMCU_to_PumpIOBus
+SET link_PumpActuatorMCU_to_PumpIOBus node PumpActuatorMCU
+SET link_PumpActuatorMCU_to_PumpIOBus bus PumpIOBus
+SET link_PumpActuatorMCU_to_PumpIOBus priority 0
+NODE LINK link_GlucoseSensorMCU_to_BT
+SET link_GlucoseSensorMCU_to_BT node GlucoseSensorMCU
+SET link_GlucoseSensorMCU_to_BT bus BT
+SET link_GlucoseSensorMCU_to_BT priority 0
+NODE LINK link_SmartphoneBTInterface_to_SmartphoneIOBus
+SET link_SmartphoneBTInterface_to_SmartphoneIOBus node SmartphoneBTInterface
+SET link_SmartphoneBTInterface_to_SmartphoneIOBus bus SmartphoneIOBus
+SET link_SmartphoneBTInterface_to_SmartphoneIOBus priority 0
diff --git a/ttool/src/test/resources/tmltranslator/DiplodocusSecurityTest/Models/ITA01_v5/mapAtt/spec.tmap b/ttool/src/test/resources/tmltranslator/DiplodocusSecurityTest/Models/ITA01_v5/mapAtt/spec.tmap
new file mode 100644
index 0000000000..02086a63ad
--- /dev/null
+++ b/ttool/src/test/resources/tmltranslator/DiplodocusSecurityTest/Models/ITA01_v5/mapAtt/spec.tmap
@@ -0,0 +1,110 @@
+TMLSPEC
+    #include "spec.tml"
+ENDTMLSPEC
+
+TMLARCHI
+    #include "spec.tarchi"
+ENDTMLARCHI
+
+TMLMAPPING
+    MAP PumpActuatorMCU Application__PumpActuator
+    SET Application__PumpActuator priority 0
+    MAP MedicalCPU Application__MedicalInformationSystem
+    SET Application__MedicalInformationSystem priority 0
+    MAP ReservoirSensorMCU Application__ReservoirSensor
+    SET Application__ReservoirSensor priority 0
+    MAP BatterySensorMCU Application__BatterySensor
+    SET Application__BatterySensor priority 0
+    MAP PumpProcessor Application__PumpController
+    SET Application__PumpController priority 0
+    MAP PumpProcessor Application__PumpControllerTimer
+    SET Application__PumpControllerTimer priority 0
+    MAP GlucoseSensorMCU Application__GlucoseLevelSensor
+    SET Application__GlucoseLevelSensor priority 0
+    MAP SmartphoneCPU Application__SmartphoneAppController
+    SET Application__SmartphoneAppController priority 0
+    MAP SmartphoneCPU Application__AppControllerTimerBasal
+    SET Application__AppControllerTimerBasal priority 0
+    MAP SmartphoneCPU Application__AppControllerTimer
+    SET Application__AppControllerTimer priority 0
+    MAP DisplayMCU Application__SmartphoneAppInterface
+    SET Application__SmartphoneAppInterface priority 0
+    MAP DisplayMCU Application__AppInterfaceTimer
+    SET Application__AppInterfaceTimer priority 0
+    MAP MedicalMemory Application__emergencySign
+    SET Application__emergencySign priority 0
+    MAP SmartphoneBus Application__emergencySign
+    SET Application__emergencySign priority 0
+    MAP SmartphoneIOBus Application__emergencySign
+    SET Application__emergencySign priority 0
+    MAP InterconnectionNetwork Application__emergencySign
+    SET Application__emergencySign priority 0
+    MAP MedicalIOBus Application__emergencySign
+    SET Application__emergencySign priority 0
+    MAP MedicalBus Application__emergencySign
+    SET Application__emergencySign priority 0
+    MAP SmartphoneMemory Application__glucose
+    SET Application__glucose priority 0
+    MAP SmartphoneBus Application__glucose
+    SET Application__glucose priority 0
+    MAP SmartphoneIOBus Application__glucose
+    SET Application__glucose priority 0
+    MAP BT Application__glucose
+    SET Application__glucose priority 0
+    MAP SmartphoneMemory Application__feedback4Interface
+    SET Application__feedback4Interface priority 0
+    MAP SmartphoneBus Application__feedback4Interface
+    SET Application__feedback4Interface priority 0
+    MAP SmartphoneMemory Application__inputCalories
+    SET Application__inputCalories priority 0
+    MAP SmartphoneBus Application__inputCalories
+    SET Application__inputCalories priority 0
+    MAP PumpMemory Application__battery
+    SET Application__battery priority 0
+    MAP PumpBus Application__battery
+    SET Application__battery priority 0
+    MAP PumpIOBus Application__battery
+    SET Application__battery priority 0
+    MAP PumpMemory Application__reservoir
+    SET Application__reservoir priority 0
+    MAP PumpBus Application__reservoir
+    SET Application__reservoir priority 0
+    MAP PumpIOBus Application__reservoir
+    SET Application__reservoir priority 0
+    MAP PumpMemory Application__pumpBasal
+    SET Application__pumpBasal priority 0
+    MAP SmartphoneBus Application__pumpBasal
+    SET Application__pumpBasal priority 0
+    MAP SmartphoneIOBus Application__pumpBasal
+    SET Application__pumpBasal priority 0
+    MAP InterconnectionNetwork Application__pumpBasal
+    SET Application__pumpBasal priority 0
+    MAP PumpBus Application__pumpBasal
+    SET Application__pumpBasal priority 0
+    MAP PumpIOBus Application__pumpBasal
+    SET Application__pumpBasal priority 0
+    MAP PumpMemory Application__pumpBolus
+    SET Application__pumpBolus priority 0
+    MAP SmartphoneBus Application__pumpBolus
+    SET Application__pumpBolus priority 0
+    MAP SmartphoneIOBus Application__pumpBolus
+    SET Application__pumpBolus priority 0
+    MAP InterconnectionNetwork Application__pumpBolus
+    SET Application__pumpBolus priority 0
+    MAP PumpBus Application__pumpBolus
+    SET Application__pumpBolus priority 0
+    MAP PumpIOBus Application__pumpBolus
+    SET Application__pumpBolus priority 0
+    MAP PumpMemory Application__feedback4App
+    SET Application__feedback4App priority 0
+    MAP PumpBus Application__feedback4App
+    SET Application__feedback4App priority 0
+    MAP PumpIOBus Application__feedback4App
+    SET Application__feedback4App priority 0
+    MAP InterconnectionNetwork Application__feedback4App
+    SET Application__feedback4App priority 0
+    MAP SmartphoneIOBus Application__feedback4App
+    SET Application__feedback4App priority 0
+    MAP SmartphoneBus Application__feedback4App
+    SET Application__feedback4App priority 0
+ENDTMLMAPPING
diff --git a/ttool/src/test/resources/tmltranslator/DiplodocusSecurityTest/Models/ITA01_v5/mapAtt/spec.tml b/ttool/src/test/resources/tmltranslator/DiplodocusSecurityTest/Models/ITA01_v5/mapAtt/spec.tml
new file mode 100644
index 0000000000..c763c0423a
--- /dev/null
+++ b/ttool/src/test/resources/tmltranslator/DiplodocusSecurityTest/Models/ITA01_v5/mapAtt/spec.tml
@@ -0,0 +1,338 @@
+// TML Application - FORMAT 0.2
+// Application: /media/sf_vbox_shared/ITA01_v5.xml
+// Generated: Wed Dec 27 10:10:39 EST 2023
+
+// PRAGMAS
+
+// Channels
+CHANNEL Application__battery BRBW 40 8 OUT Application__BatterySensor IN Application__PumpController
+VCCHANNEL Application__battery 0
+CONFCHANNEL Application__battery
+CHANNEL Application__emergencySign BRBW 40 8 OUT Application__SmartphoneAppController IN Application__MedicalInformationSystem
+VCCHANNEL Application__emergencySign 0
+CONFCHANNEL Application__emergencySign
+AUTHCHANNEL Application__emergencySign
+CHANNEL Application__feedback4App BRBW 40 8 OUT Application__PumpController IN Application__SmartphoneAppController
+VCCHANNEL Application__feedback4App 0
+CONFCHANNEL Application__feedback4App
+AUTHCHANNEL Application__feedback4App
+CHANNEL Application__feedback4Interface BRBW 40 8 OUT Application__SmartphoneAppController IN Application__SmartphoneAppInterface
+VCCHANNEL Application__feedback4Interface 0
+CHANNEL Application__glucose BRBW 40 8 OUT Application__GlucoseLevelSensor IN Application__SmartphoneAppController
+VCCHANNEL Application__glucose 0
+CHANNEL Application__inputCalories BRBW 40 1 OUT Application__SmartphoneAppInterface IN Application__SmartphoneAppController
+VCCHANNEL Application__inputCalories 0
+CHANNEL Application__pumpBasal BRBW 40 8 OUT Application__SmartphoneAppController IN Application__PumpController
+VCCHANNEL Application__pumpBasal 0
+CHANNEL Application__pumpBolus BRBW 40 8 OUT Application__SmartphoneAppController IN Application__PumpController
+VCCHANNEL Application__pumpBolus 0
+CHANNEL Application__reservoir BRNBW 40 OUT Application__ReservoirSensor IN Application__PumpController
+VCCHANNEL Application__reservoir 0
+
+// Events
+EVENT Application__batteryE__Application__batteryE(int) NIB 8 Application__BatterySensor Application__PumpController
+EVENT Application__emergencyResponseE__Application__emergencyResponseE() NIB 8 Application__MedicalInformationSystem Application__SmartphoneAppController
+EVENT Application__emergencySignE__Application__emergencySignE() NIB 8 Application__SmartphoneAppController Application__MedicalInformationSystem
+EVENT Application__feedback4AppE__Application__feedback4AppE(int, int, int) NIB 8 Application__PumpController Application__SmartphoneAppController
+EVENT Application__feedback4InterfaceE__Application__feedback4InterfaceE(int, int, int) NIB 8 Application__SmartphoneAppController Application__SmartphoneAppInterface
+EVENT Application__glucoseE__Application__glucoseE(int) NIB 8 Application__GlucoseLevelSensor Application__SmartphoneAppController
+EVENT Application__inputCaloriesE__Application__inputCaloriesE(int) NIB 8 Application__SmartphoneAppInterface Application__SmartphoneAppController
+EVENT Application__pumpBasalE__Application__pumpBasalE(int) NIB 8 Application__SmartphoneAppController Application__PumpController
+EVENT Application__pumpBolusE__Application__pumpBolusE(int) NIB 8 Application__SmartphoneAppController Application__PumpController
+EVENT Application__reservoirE__Application__reservoirE(int) NIB 8 Application__ReservoirSensor Application__PumpController
+EVENT Application__resetAppTimerBasal__Application__resetAppTimerBasal() NIB 8 Application__SmartphoneAppController Application__AppControllerTimerBasal
+EVENT Application__resetAppTimer__Application__resetAppTimer() NIB 8 Application__SmartphoneAppController Application__AppControllerTimer
+EVENT Application__resetInterfaceTimer__Application__resetInterfaceTimer() NIB 8 Application__SmartphoneAppInterface Application__AppInterfaceTimer
+EVENT Application__resetTimer__Application__resetTimer() NIB 8 Application__PumpController Application__PumpControllerTimer
+EVENT Application__startPumping__Application__startPumping() NIB 8 Application__PumpController Application__PumpActuator
+EVENT Application__stopPumping__Application__stopPumping() NIB 8 Application__PumpController Application__PumpActuator
+EVENT Application__timeout4Basal__Application__timeout4Basal() NIB 8 Application__AppControllerTimerBasal Application__SmartphoneAppController
+EVENT Application__timeout4CtrlFeedback__Application__timeout4CtrlFeeback() NIB 8 Application__PumpControllerTimer Application__PumpController
+EVENT Application__timeout4Eat__Application__timeout4Eat() NIB 8 Application__AppInterfaceTimer Application__SmartphoneAppInterface
+EVENT Application__timeout4Feedback__Application__timeout4Feedback() NIB 8 Application__AppControllerTimer Application__SmartphoneAppController
+
+// Requests
+
+TASK Application__AppControllerTimer
+    TASKOP
+    //Local variables
+    int loop_0 = 0
+    
+    //Behavior
+    FOR(loop_0 = 0; loop_0<1; loop_0 = loop_0 + 1)
+        WAIT Application__resetAppTimer__Application__resetAppTimer
+        DELAY 10 ms isActiveDelay false
+        NOTIFY Application__timeout4Feedback__Application__timeout4Feedback
+    ENDFOR
+ENDTASK
+
+TASK Application__AppControllerTimerBasal
+    TASKOP
+    //Local variables
+    int loop_0 = 0
+    
+    //Behavior
+    FOR(loop_0 = 0; loop_0<1; loop_0 = loop_0 + 1)
+        WAIT Application__resetAppTimerBasal__Application__resetAppTimerBasal
+        DELAY 10 ms isActiveDelay false
+        NOTIFY Application__timeout4Basal__Application__timeout4Basal
+    ENDFOR
+ENDTASK
+
+TASK Application__AppInterfaceTimer
+    TASKOP
+    //Local variables
+    int loop_0 = 0
+    
+    //Behavior
+    FOR(loop_0 = 0; loop_0<1; loop_0 = loop_0 + 1)
+        WAIT Application__resetInterfaceTimer__Application__resetInterfaceTimer
+        DELAY 100 ms isActiveDelay false
+        NOTIFY Application__timeout4Eat__Application__timeout4Eat
+    ENDFOR
+ENDTASK
+
+TASK Application__BatterySensor
+    TASKOP
+    //Local variables
+    int level
+    int loop_0 = 0
+    
+    //Behavior
+    FOR(loop_0 = 0; loop_0<1; loop_0 = loop_0 + 1)
+        DELAY 10 ms isActiveDelay false
+        RANDOM 0 level 0 2
+        NOTIFY Application__batteryE__Application__batteryE level
+        WRITE Application__battery 1
+    ENDFOR
+ENDTASK
+
+TASK Application__GlucoseLevelSensor
+    TASKOP
+    //Local variables
+    int level
+    int loop_0 = 0
+    
+    //Behavior
+    FOR(loop_0 = 0; loop_0<1; loop_0 = loop_0 + 1)
+        DELAY 10 ms isActiveDelay false
+        RANDOM 0 level 1 3
+        NOTIFY Application__glucoseE__Application__glucoseE level
+        WRITE Application__glucose 1
+    ENDFOR
+ENDTASK
+
+TASK Application__MedicalInformationSystem
+    TASKOP
+    //Local variables
+    int loop_0 = 0
+    
+    //Behavior
+    FOR(loop_0 = 0; loop_0<1; loop_0 = loop_0 + 1)
+        WAIT Application__emergencySignE__Application__emergencySignE
+        EXECC 100 AES_Emergency SE 100 100 0 0 - - 2
+        READ Application__emergencySign 1+0 AES_Emergency
+        EXECI 5000
+        NOTIFY Application__emergencyResponseE__Application__emergencyResponseE
+    ENDFOR
+ENDTASK
+
+TASK Application__PumpActuator
+    TASKOP
+    //Local variables
+    int loop_0 = 0
+    
+    //Behavior
+    FOR(loop_0 = 0; loop_0<1; loop_0 = loop_0 + 1)
+        SELECTEVT
+            CASE Application__startPumping__Application__startPumping
+                EXECI 10000
+            ENDCASE
+            CASE Application__stopPumping__Application__stopPumping
+                EXECI 10000
+            ENDCASE
+        ENDSELECTEVT
+    ENDFOR
+ENDTASK
+
+TASK Application__PumpController
+    TASKOP
+    //Local variables
+    int batteryLevel = 2
+    int reservoirLevel = 2
+    int pumpingStatus = 0
+    int basal
+    int bolus
+    int insulineToPump = 0
+    int i
+    int x
+    int loop_0 = 0
+    
+    //Behavior
+    NOTIFY Application__resetTimer__Application__resetTimer
+    FOR(loop_0 = 0; loop_0<10; loop_0 = loop_0 + 1)
+        SELECTEVT
+            CASE Application__timeout4CtrlFeedback__Application__timeout4CtrlFeeback
+                NOTIFY Application__feedback4AppE__Application__feedback4AppE batteryLevel reservoirLevel pumpingStatus
+                EXECC 100 AES_CTRL SE 100 100 0 0 - - 1
+                WRITE Application__feedback4App 1+0 AES_CTRL
+            ENDCASE
+            CASE Application__reservoirE__Application__reservoirE reservoirLevel
+                READ Application__reservoir 1
+            ENDCASE
+            CASE Application__batteryE__Application__batteryE batteryLevel
+                READ Application__battery 1
+            ENDCASE
+            CASE Application__pumpBolusE__Application__pumpBolusE bolus
+                READ Application__pumpBolus 1
+                IF (pumpingStatus==1)
+                    NOTIFY Application__stopPumping__Application__stopPumping
+                    pumpingStatus=0
+                ELSE
+                ENDIF
+                insulineToPump=insulineToPump+bolus*10
+                NOTIFY Application__startPumping__Application__startPumping
+                pumpingStatus=1
+                FOR(i=insulineToPump; i>0; i=i-1)
+                    DELAY 1 ms isActiveDelay false
+                ENDFOR
+                NOTIFY Application__stopPumping__Application__stopPumping
+                pumpingStatus=0
+            ENDCASE
+            CASE Application__pumpBasalE__Application__pumpBasalE basal
+                READ Application__pumpBasal 1
+                IF (pumpingStatus==0)
+                    insulineToPump=5
+                    NOTIFY Application__startPumping__Application__startPumping
+                    pumpingStatus=1
+                    FOR(i=insulineToPump; i>0; i=i-1)
+                        DELAY 1 ms isActiveDelay false
+                    ENDFOR
+                    NOTIFY Application__stopPumping__Application__stopPumping
+                    pumpingStatus=0
+                ELSE
+                ENDIF
+            ENDCASE
+        ENDSELECTEVT
+    ENDFOR
+ENDTASK
+
+TASK Application__PumpControllerTimer
+    TASKOP
+    //Local variables
+    int loop_0 = 0
+    
+    //Behavior
+    FOR(loop_0 = 0; loop_0<1; loop_0 = loop_0 + 1)
+        WAIT Application__resetTimer__Application__resetTimer
+        DELAY 10 ms isActiveDelay false
+        NOTIFY Application__timeout4CtrlFeedback__Application__timeout4CtrlFeeback
+    ENDFOR
+ENDTASK
+
+TASK Application__ReservoirSensor
+    TASKOP
+    //Local variables
+    int level
+    int loop_0 = 0
+    
+    //Behavior
+    FOR(loop_0 = 0; loop_0<1; loop_0 = loop_0 + 1)
+        DELAY 10 ms isActiveDelay false
+        RANDOM 0 level 0 2
+        NOTIFY Application__reservoirE__Application__reservoirE level
+        WRITE Application__reservoir 1
+    ENDFOR
+ENDTASK
+
+TASK Application__SmartphoneAppController
+    TASKOP
+    //Local variables
+    int calories
+    int glucoseLevel
+    int batteryLevel
+    int reservoirLevel
+    int pumpingStatus
+    int insulinToPump
+    int basal
+    int bolus
+    int contCriticalLevel
+    int x
+    int criticalSituation = 0
+    int i
+    
+    //Behavior
+    calories=0
+    bolus=0
+    contCriticalLevel=0
+    NOTIFY Application__resetAppTimer__Application__resetAppTimer
+    FOR(i=0; i<1; i = i+1)
+        SELECTEVT
+            CASE Application__feedback4AppE__Application__feedback4AppE batteryLevel reservoirLevel pumpingStatus
+                READ Application__feedback4App 1+0 AES_CTRL
+                EXECC 100 AES_CTRL SE 100 100 0 0 - - 2
+            ENDCASE
+            CASE Application__timeout4Basal__Application__timeout4Basal
+                NOTIFY Application__pumpBasalE__Application__pumpBasalE basal
+                WRITE Application__pumpBasal 1
+            ENDCASE
+            CASE Application__timeout4Feedback__Application__timeout4Feedback
+                NOTIFY Application__feedback4InterfaceE__Application__feedback4InterfaceE glucoseLevel batteryLevel reservoirLevel
+                WRITE Application__feedback4Interface 1
+            ENDCASE
+            CASE Application__glucoseE__Application__glucoseE glucoseLevel
+                READ Application__glucose 1
+                IF (glucoseLevel==1)
+                    contCriticalLevel=contCriticalLevel+1
+                    IF (contCriticalLevel==10)
+                        criticalSituation=1
+                        NOTIFY Application__emergencySignE__Application__emergencySignE
+                        EXECC 100 AES_Emergency SE 100 100 0 0 - - 1
+                        WRITE Application__emergencySign 1+0 AES_Emergency
+                        WAIT Application__emergencyResponseE__Application__emergencyResponseE
+                    ELSE
+                    ENDIF
+                ELSE
+                    contCriticalLevel=0
+                    criticalSituation=0
+                ENDIF
+            ENDCASE
+            CASE Application__inputCaloriesE__Application__inputCaloriesE calories
+                READ Application__inputCalories 1
+                bolus=calories
+                NOTIFY Application__pumpBolusE__Application__pumpBolusE bolus
+                WRITE Application__pumpBolus 1
+            ENDCASE
+        ENDSELECTEVT
+    ENDFOR
+ENDTASK
+
+TASK Application__SmartphoneAppInterface
+    TASKOP
+    //Local variables
+    int calories
+    int glucoseLevel
+    int batteryLevel
+    int reservoirLevel
+    int pumpingStatus
+    int loop_0 = 0
+    
+    //Behavior
+    calories=0
+    NOTIFY Application__resetInterfaceTimer__Application__resetInterfaceTimer
+    FOR(loop_0 = 0; loop_0<1; loop_0 = loop_0 + 1)
+        SELECTEVT
+            CASE Application__timeout4Eat__Application__timeout4Eat
+                RANDOM 0 calories 1 3
+                NOTIFY Application__inputCaloriesE__Application__inputCaloriesE calories
+                WRITE Application__inputCalories 1
+                NOTIFY Application__resetInterfaceTimer__Application__resetInterfaceTimer
+                calories=0
+            ENDCASE
+            CASE Application__feedback4InterfaceE__Application__feedback4InterfaceE glucoseLevel batteryLevel reservoirLevel
+                READ Application__feedback4Interface 1
+            ENDCASE
+        ENDSELECTEVT
+    ENDFOR
+ENDTASK
+
diff --git a/ttool/src/test/resources/tmltranslator/DiplodocusSecurityTest/Models/ITA01_v5/mapNoProtection/golden b/ttool/src/test/resources/tmltranslator/DiplodocusSecurityTest/Models/ITA01_v5/mapNoProtection/golden
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/ttool/src/test/resources/tmltranslator/DiplodocusSecurityTest/Models/ITA01_v5/mapNoProtection/spec.tarchi b/ttool/src/test/resources/tmltranslator/DiplodocusSecurityTest/Models/ITA01_v5/mapNoProtection/spec.tarchi
new file mode 100644
index 0000000000..05519c971a
--- /dev/null
+++ b/ttool/src/test/resources/tmltranslator/DiplodocusSecurityTest/Models/ITA01_v5/mapNoProtection/spec.tarchi
@@ -0,0 +1,354 @@
+// Master clock frequency - in MHz
+MASTERCLOCKFREQUENCY 200
+
+NODE CPU PumpActuatorMCU
+SET PumpActuatorMCU nbOfCores 1
+SET PumpActuatorMCU byteDataSize 4
+SET PumpActuatorMCU pipelineSize 5
+SET PumpActuatorMCU goIdleTime 10
+SET PumpActuatorMCU maxConsecutiveIdleCycles 10
+SET PumpActuatorMCU taskSwitchingTime 20
+SET PumpActuatorMCU branchingPredictionPenalty 2
+SET PumpActuatorMCU cacheMiss 5
+SET PumpActuatorMCU schedulingPolicy 0
+SET PumpActuatorMCU sliceTime 10000
+SET PumpActuatorMCU execiTime 1
+SET PumpActuatorMCU execcTime 1
+SET PumpActuatorMCU clockDivider 1
+
+NODE BUS BT
+SET BT byteDataSize 4
+SET BT pipelineSize 1
+SET BT arbitration 0
+SET BT sliceTime 10000
+SET BT burstSize 100
+SET BT privacy public
+SET BT clockDivider 1
+
+NODE MEMORY MedicalMemory
+SET MedicalMemory byteDataSize 4
+SET MedicalMemory clockDivider 1
+
+NODE BRIDGE SmartphoneBTInterface
+SET SmartphoneBTInterface bufferByteSize 4
+SET SmartphoneBTInterface clockDivider 1
+
+NODE CPU MedicalCPU
+SET MedicalCPU nbOfCores 1
+SET MedicalCPU byteDataSize 4
+SET MedicalCPU pipelineSize 5
+SET MedicalCPU goIdleTime 10
+SET MedicalCPU maxConsecutiveIdleCycles 10
+SET MedicalCPU taskSwitchingTime 20
+SET MedicalCPU branchingPredictionPenalty 2
+SET MedicalCPU cacheMiss 5
+SET MedicalCPU schedulingPolicy 0
+SET MedicalCPU sliceTime 10000
+SET MedicalCPU execiTime 1
+SET MedicalCPU execcTime 1
+SET MedicalCPU clockDivider 1
+
+NODE BUS MedicalBus
+SET MedicalBus byteDataSize 4
+SET MedicalBus pipelineSize 1
+SET MedicalBus arbitration 0
+SET MedicalBus sliceTime 10000
+SET MedicalBus burstSize 100
+SET MedicalBus privacy public
+SET MedicalBus clockDivider 1
+
+NODE BRIDGE MedicalBridge
+SET MedicalBridge bufferByteSize 4
+SET MedicalBridge clockDivider 1
+
+NODE CPU MedicalGUIMCU
+SET MedicalGUIMCU nbOfCores 1
+SET MedicalGUIMCU byteDataSize 4
+SET MedicalGUIMCU pipelineSize 5
+SET MedicalGUIMCU goIdleTime 10
+SET MedicalGUIMCU maxConsecutiveIdleCycles 10
+SET MedicalGUIMCU taskSwitchingTime 20
+SET MedicalGUIMCU branchingPredictionPenalty 2
+SET MedicalGUIMCU cacheMiss 5
+SET MedicalGUIMCU schedulingPolicy 0
+SET MedicalGUIMCU sliceTime 10000
+SET MedicalGUIMCU execiTime 1
+SET MedicalGUIMCU execcTime 1
+SET MedicalGUIMCU clockDivider 1
+
+NODE BUS MedicalIOBus
+SET MedicalIOBus byteDataSize 4
+SET MedicalIOBus pipelineSize 1
+SET MedicalIOBus arbitration 0
+SET MedicalIOBus sliceTime 10000
+SET MedicalIOBus burstSize 100
+SET MedicalIOBus privacy public
+SET MedicalIOBus clockDivider 1
+
+NODE BRIDGE MedicalNetwork
+SET MedicalNetwork bufferByteSize 4
+SET MedicalNetwork clockDivider 1
+
+NODE MEMORY SmartphoneMemory
+SET SmartphoneMemory byteDataSize 4
+SET SmartphoneMemory clockDivider 1
+
+NODE CPU SmartphoneCPU
+SET SmartphoneCPU nbOfCores 1
+SET SmartphoneCPU byteDataSize 4
+SET SmartphoneCPU pipelineSize 5
+SET SmartphoneCPU goIdleTime 10
+SET SmartphoneCPU maxConsecutiveIdleCycles 10
+SET SmartphoneCPU taskSwitchingTime 20
+SET SmartphoneCPU branchingPredictionPenalty 2
+SET SmartphoneCPU cacheMiss 5
+SET SmartphoneCPU schedulingPolicy 0
+SET SmartphoneCPU sliceTime 10000
+SET SmartphoneCPU execiTime 1
+SET SmartphoneCPU execcTime 1
+SET SmartphoneCPU clockDivider 1
+
+NODE BUS SmartphoneBus
+SET SmartphoneBus byteDataSize 4
+SET SmartphoneBus pipelineSize 1
+SET SmartphoneBus arbitration 0
+SET SmartphoneBus sliceTime 10000
+SET SmartphoneBus burstSize 100
+SET SmartphoneBus privacy public
+SET SmartphoneBus clockDivider 1
+
+NODE BRIDGE SmartphoneBridge
+SET SmartphoneBridge bufferByteSize 4
+SET SmartphoneBridge clockDivider 1
+
+NODE CPU DisplayMCU
+SET DisplayMCU nbOfCores 1
+SET DisplayMCU byteDataSize 4
+SET DisplayMCU pipelineSize 5
+SET DisplayMCU goIdleTime 10
+SET DisplayMCU maxConsecutiveIdleCycles 10
+SET DisplayMCU taskSwitchingTime 20
+SET DisplayMCU branchingPredictionPenalty 2
+SET DisplayMCU cacheMiss 5
+SET DisplayMCU schedulingPolicy 0
+SET DisplayMCU sliceTime 10000
+SET DisplayMCU execiTime 1
+SET DisplayMCU execcTime 1
+SET DisplayMCU clockDivider 1
+
+NODE BRIDGE SmartphoneNetwork
+SET SmartphoneNetwork bufferByteSize 4
+SET SmartphoneNetwork clockDivider 1
+
+NODE BUS SmartphoneIOBus
+SET SmartphoneIOBus byteDataSize 4
+SET SmartphoneIOBus pipelineSize 1
+SET SmartphoneIOBus arbitration 0
+SET SmartphoneIOBus sliceTime 10000
+SET SmartphoneIOBus burstSize 100
+SET SmartphoneIOBus privacy public
+SET SmartphoneIOBus clockDivider 1
+
+NODE BRIDGE PumpNetwork
+SET PumpNetwork bufferByteSize 4
+SET PumpNetwork clockDivider 1
+
+NODE CPU ReservoirSensorMCU
+SET ReservoirSensorMCU nbOfCores 1
+SET ReservoirSensorMCU byteDataSize 4
+SET ReservoirSensorMCU pipelineSize 5
+SET ReservoirSensorMCU goIdleTime 10
+SET ReservoirSensorMCU maxConsecutiveIdleCycles 10
+SET ReservoirSensorMCU taskSwitchingTime 20
+SET ReservoirSensorMCU branchingPredictionPenalty 2
+SET ReservoirSensorMCU cacheMiss 5
+SET ReservoirSensorMCU schedulingPolicy 0
+SET ReservoirSensorMCU sliceTime 10000
+SET ReservoirSensorMCU execiTime 1
+SET ReservoirSensorMCU execcTime 1
+SET ReservoirSensorMCU clockDivider 1
+
+NODE CPU BatterySensorMCU
+SET BatterySensorMCU nbOfCores 1
+SET BatterySensorMCU byteDataSize 4
+SET BatterySensorMCU pipelineSize 5
+SET BatterySensorMCU goIdleTime 10
+SET BatterySensorMCU maxConsecutiveIdleCycles 10
+SET BatterySensorMCU taskSwitchingTime 20
+SET BatterySensorMCU branchingPredictionPenalty 2
+SET BatterySensorMCU cacheMiss 5
+SET BatterySensorMCU schedulingPolicy 0
+SET BatterySensorMCU sliceTime 10000
+SET BatterySensorMCU execiTime 1
+SET BatterySensorMCU execcTime 1
+SET BatterySensorMCU clockDivider 1
+
+NODE BRIDGE toPumpIOBus
+SET toPumpIOBus bufferByteSize 4
+SET toPumpIOBus clockDivider 1
+
+NODE MEMORY PumpMemory
+SET PumpMemory byteDataSize 4
+SET PumpMemory clockDivider 1
+
+NODE BUS PumpBus
+SET PumpBus byteDataSize 4
+SET PumpBus pipelineSize 1
+SET PumpBus arbitration 0
+SET PumpBus sliceTime 10000
+SET PumpBus burstSize 100
+SET PumpBus privacy public
+SET PumpBus clockDivider 1
+
+NODE CPU PumpProcessor
+SET PumpProcessor nbOfCores 1
+SET PumpProcessor byteDataSize 4
+SET PumpProcessor pipelineSize 5
+SET PumpProcessor goIdleTime 10
+SET PumpProcessor maxConsecutiveIdleCycles 10
+SET PumpProcessor taskSwitchingTime 20
+SET PumpProcessor branchingPredictionPenalty 2
+SET PumpProcessor cacheMiss 5
+SET PumpProcessor schedulingPolicy 0
+SET PumpProcessor sliceTime 10000
+SET PumpProcessor execiTime 1
+SET PumpProcessor execcTime 1
+SET PumpProcessor clockDivider 1
+
+NODE CPU GlucoseSensorMCU
+SET GlucoseSensorMCU nbOfCores 1
+SET GlucoseSensorMCU byteDataSize 4
+SET GlucoseSensorMCU pipelineSize 5
+SET GlucoseSensorMCU goIdleTime 10
+SET GlucoseSensorMCU maxConsecutiveIdleCycles 10
+SET GlucoseSensorMCU taskSwitchingTime 20
+SET GlucoseSensorMCU branchingPredictionPenalty 2
+SET GlucoseSensorMCU cacheMiss 5
+SET GlucoseSensorMCU schedulingPolicy 0
+SET GlucoseSensorMCU sliceTime 10000
+SET GlucoseSensorMCU execiTime 1
+SET GlucoseSensorMCU execcTime 1
+SET GlucoseSensorMCU clockDivider 1
+
+NODE BUS InterconnectionNetwork
+SET InterconnectionNetwork byteDataSize 4
+SET InterconnectionNetwork pipelineSize 1
+SET InterconnectionNetwork arbitration 0
+SET InterconnectionNetwork sliceTime 10000
+SET InterconnectionNetwork burstSize 100
+SET InterconnectionNetwork privacy public
+SET InterconnectionNetwork clockDivider 1
+
+NODE BUS PumpIOBus
+SET PumpIOBus byteDataSize 1
+SET PumpIOBus pipelineSize 1
+SET PumpIOBus arbitration 0
+SET PumpIOBus sliceTime 10000
+SET PumpIOBus burstSize 100
+SET PumpIOBus privacy public
+SET PumpIOBus clockDivider 1
+
+NODE LINK link_SmartphoneBTInterface_to_SmartphoneIOBus
+SET link_SmartphoneBTInterface_to_SmartphoneIOBus node SmartphoneBTInterface
+SET link_SmartphoneBTInterface_to_SmartphoneIOBus bus SmartphoneIOBus
+SET link_SmartphoneBTInterface_to_SmartphoneIOBus priority 0
+NODE LINK link_GlucoseSensorMCU_to_BT
+SET link_GlucoseSensorMCU_to_BT node GlucoseSensorMCU
+SET link_GlucoseSensorMCU_to_BT bus BT
+SET link_GlucoseSensorMCU_to_BT priority 0
+NODE LINK link_PumpActuatorMCU_to_PumpIOBus
+SET link_PumpActuatorMCU_to_PumpIOBus node PumpActuatorMCU
+SET link_PumpActuatorMCU_to_PumpIOBus bus PumpIOBus
+SET link_PumpActuatorMCU_to_PumpIOBus priority 0
+NODE LINK link_SmartphoneBTInterface_to_BT
+SET link_SmartphoneBTInterface_to_BT node SmartphoneBTInterface
+SET link_SmartphoneBTInterface_to_BT bus BT
+SET link_SmartphoneBTInterface_to_BT priority 0
+NODE LINK link_MedicalMemory_to_MedicalBus
+SET link_MedicalMemory_to_MedicalBus node MedicalMemory
+SET link_MedicalMemory_to_MedicalBus bus MedicalBus
+SET link_MedicalMemory_to_MedicalBus priority 0
+NODE LINK link_MedicalCPU_to_MedicalBus
+SET link_MedicalCPU_to_MedicalBus node MedicalCPU
+SET link_MedicalCPU_to_MedicalBus bus MedicalBus
+SET link_MedicalCPU_to_MedicalBus priority 0
+NODE LINK link_MedicalBridge_to_MedicalBus
+SET link_MedicalBridge_to_MedicalBus node MedicalBridge
+SET link_MedicalBridge_to_MedicalBus bus MedicalBus
+SET link_MedicalBridge_to_MedicalBus priority 0
+NODE LINK link_MedicalBridge_to_MedicalIOBus
+SET link_MedicalBridge_to_MedicalIOBus node MedicalBridge
+SET link_MedicalBridge_to_MedicalIOBus bus MedicalIOBus
+SET link_MedicalBridge_to_MedicalIOBus priority 0
+NODE LINK link_MedicalGUIMCU_to_MedicalIOBus
+SET link_MedicalGUIMCU_to_MedicalIOBus node MedicalGUIMCU
+SET link_MedicalGUIMCU_to_MedicalIOBus bus MedicalIOBus
+SET link_MedicalGUIMCU_to_MedicalIOBus priority 0
+NODE LINK link_MedicalNetwork_to_MedicalIOBus
+SET link_MedicalNetwork_to_MedicalIOBus node MedicalNetwork
+SET link_MedicalNetwork_to_MedicalIOBus bus MedicalIOBus
+SET link_MedicalNetwork_to_MedicalIOBus priority 0
+NODE LINK link_MedicalNetwork_to_InterconnectionNetwork
+SET link_MedicalNetwork_to_InterconnectionNetwork node MedicalNetwork
+SET link_MedicalNetwork_to_InterconnectionNetwork bus InterconnectionNetwork
+SET link_MedicalNetwork_to_InterconnectionNetwork priority 0
+NODE LINK link_SmartphoneMemory_to_SmartphoneBus
+SET link_SmartphoneMemory_to_SmartphoneBus node SmartphoneMemory
+SET link_SmartphoneMemory_to_SmartphoneBus bus SmartphoneBus
+SET link_SmartphoneMemory_to_SmartphoneBus priority 0
+NODE LINK link_SmartphoneCPU_to_SmartphoneBus
+SET link_SmartphoneCPU_to_SmartphoneBus node SmartphoneCPU
+SET link_SmartphoneCPU_to_SmartphoneBus bus SmartphoneBus
+SET link_SmartphoneCPU_to_SmartphoneBus priority 0
+NODE LINK link_SmartphoneBridge_to_SmartphoneBus
+SET link_SmartphoneBridge_to_SmartphoneBus node SmartphoneBridge
+SET link_SmartphoneBridge_to_SmartphoneBus bus SmartphoneBus
+SET link_SmartphoneBridge_to_SmartphoneBus priority 0
+NODE LINK link_SmartphoneBridge_to_SmartphoneIOBus
+SET link_SmartphoneBridge_to_SmartphoneIOBus node SmartphoneBridge
+SET link_SmartphoneBridge_to_SmartphoneIOBus bus SmartphoneIOBus
+SET link_SmartphoneBridge_to_SmartphoneIOBus priority 0
+NODE LINK link_DisplayMCU_to_SmartphoneIOBus
+SET link_DisplayMCU_to_SmartphoneIOBus node DisplayMCU
+SET link_DisplayMCU_to_SmartphoneIOBus bus SmartphoneIOBus
+SET link_DisplayMCU_to_SmartphoneIOBus priority 0
+NODE LINK link_SmartphoneNetwork_to_SmartphoneIOBus
+SET link_SmartphoneNetwork_to_SmartphoneIOBus node SmartphoneNetwork
+SET link_SmartphoneNetwork_to_SmartphoneIOBus bus SmartphoneIOBus
+SET link_SmartphoneNetwork_to_SmartphoneIOBus priority 0
+NODE LINK link_PumpMemory_to_PumpBus
+SET link_PumpMemory_to_PumpBus node PumpMemory
+SET link_PumpMemory_to_PumpBus bus PumpBus
+SET link_PumpMemory_to_PumpBus priority 0
+NODE LINK link_PumpProcessor_to_PumpBus
+SET link_PumpProcessor_to_PumpBus node PumpProcessor
+SET link_PumpProcessor_to_PumpBus bus PumpBus
+SET link_PumpProcessor_to_PumpBus priority 0
+NODE LINK link_toPumpIOBus_to_PumpBus
+SET link_toPumpIOBus_to_PumpBus node toPumpIOBus
+SET link_toPumpIOBus_to_PumpBus bus PumpBus
+SET link_toPumpIOBus_to_PumpBus priority 0
+NODE LINK link_toPumpIOBus_to_PumpIOBus
+SET link_toPumpIOBus_to_PumpIOBus node toPumpIOBus
+SET link_toPumpIOBus_to_PumpIOBus bus PumpIOBus
+SET link_toPumpIOBus_to_PumpIOBus priority 0
+NODE LINK link_BatterySensorMCU_to_PumpIOBus
+SET link_BatterySensorMCU_to_PumpIOBus node BatterySensorMCU
+SET link_BatterySensorMCU_to_PumpIOBus bus PumpIOBus
+SET link_BatterySensorMCU_to_PumpIOBus priority 0
+NODE LINK link_ReservoirSensorMCU_to_PumpIOBus
+SET link_ReservoirSensorMCU_to_PumpIOBus node ReservoirSensorMCU
+SET link_ReservoirSensorMCU_to_PumpIOBus bus PumpIOBus
+SET link_ReservoirSensorMCU_to_PumpIOBus priority 0
+NODE LINK link_PumpNetwork_to_PumpIOBus
+SET link_PumpNetwork_to_PumpIOBus node PumpNetwork
+SET link_PumpNetwork_to_PumpIOBus bus PumpIOBus
+SET link_PumpNetwork_to_PumpIOBus priority 0
+NODE LINK link_PumpNetwork_to_InterconnectionNetwork
+SET link_PumpNetwork_to_InterconnectionNetwork node PumpNetwork
+SET link_PumpNetwork_to_InterconnectionNetwork bus InterconnectionNetwork
+SET link_PumpNetwork_to_InterconnectionNetwork priority 0
+NODE LINK link_SmartphoneNetwork_to_InterconnectionNetwork
+SET link_SmartphoneNetwork_to_InterconnectionNetwork node SmartphoneNetwork
+SET link_SmartphoneNetwork_to_InterconnectionNetwork bus InterconnectionNetwork
+SET link_SmartphoneNetwork_to_InterconnectionNetwork priority 0
diff --git a/ttool/src/test/resources/tmltranslator/DiplodocusSecurityTest/Models/ITA01_v5/mapNoProtection/spec.tmap b/ttool/src/test/resources/tmltranslator/DiplodocusSecurityTest/Models/ITA01_v5/mapNoProtection/spec.tmap
new file mode 100644
index 0000000000..d7362175aa
--- /dev/null
+++ b/ttool/src/test/resources/tmltranslator/DiplodocusSecurityTest/Models/ITA01_v5/mapNoProtection/spec.tmap
@@ -0,0 +1,36 @@
+TMLSPEC
+    #include "spec.tml"
+ENDTMLSPEC
+
+TMLARCHI
+    #include "spec.tarchi"
+ENDTMLARCHI
+
+TMLMAPPING
+    MAP PumpActuatorMCU Application__PumpActuator
+    SET Application__PumpActuator priority 0
+    MAP PumpActuatorMCU Application__AppControllerTimer
+    SET Application__AppControllerTimer priority 0
+    MAP PumpActuatorMCU Application__AppControllerTimerBasal
+    SET Application__AppControllerTimerBasal priority 0
+    MAP MedicalCPU Application__MedicalInformationSystem
+    SET Application__MedicalInformationSystem priority 0
+    MAP SmartphoneCPU Application__SmartphoneAppController
+    SET Application__SmartphoneAppController priority 0
+    MAP SmartphoneCPU Application__AppInterfaceTimer
+    SET Application__AppInterfaceTimer priority 0
+    MAP DisplayMCU Application__SmartphoneAppInterface
+    SET Application__SmartphoneAppInterface priority 0
+    MAP ReservoirSensorMCU Application__ReservoirSensor
+    SET Application__ReservoirSensor priority 0
+    MAP BatterySensorMCU Application__BatterySensor
+    SET Application__BatterySensor priority 0
+    MAP PumpProcessor Application__PumpController
+    SET Application__PumpController priority 0
+    MAP PumpProcessor Application__PumpControllerTimer
+    SET Application__PumpControllerTimer priority 0
+    MAP GlucoseSensorMCU Application__GlucoseLevelSensor
+    SET Application__GlucoseLevelSensor priority 0
+    MAPSEC SmartphoneMemory AES_CTRL
+    MAPSEC MedicalMemory AES_Emergency
+ENDTMLMAPPING
diff --git a/ttool/src/test/resources/tmltranslator/DiplodocusSecurityTest/Models/ITA01_v5/mapNoProtection/spec.tml b/ttool/src/test/resources/tmltranslator/DiplodocusSecurityTest/Models/ITA01_v5/mapNoProtection/spec.tml
new file mode 100644
index 0000000000..e21f9ea3a3
--- /dev/null
+++ b/ttool/src/test/resources/tmltranslator/DiplodocusSecurityTest/Models/ITA01_v5/mapNoProtection/spec.tml
@@ -0,0 +1,338 @@
+// TML Application - FORMAT 0.2
+// Application: /media/sf_vbox_shared/ITA01_v5.xml
+// Generated: Wed Dec 27 10:01:13 EST 2023
+
+// PRAGMAS
+
+// Channels
+CHANNEL Application__battery BRBW 40 8 OUT Application__BatterySensor IN Application__PumpController
+VCCHANNEL Application__battery 0
+CONFCHANNEL Application__battery
+CHANNEL Application__emergencySign BRBW 40 8 OUT Application__SmartphoneAppController IN Application__MedicalInformationSystem
+VCCHANNEL Application__emergencySign 0
+CONFCHANNEL Application__emergencySign
+AUTHCHANNEL Application__emergencySign
+CHANNEL Application__feedback4App BRBW 40 8 OUT Application__PumpController IN Application__SmartphoneAppController
+VCCHANNEL Application__feedback4App 0
+CONFCHANNEL Application__feedback4App
+AUTHCHANNEL Application__feedback4App
+CHANNEL Application__feedback4Interface BRBW 40 8 OUT Application__SmartphoneAppController IN Application__SmartphoneAppInterface
+VCCHANNEL Application__feedback4Interface 0
+CHANNEL Application__glucose BRBW 40 8 OUT Application__GlucoseLevelSensor IN Application__SmartphoneAppController
+VCCHANNEL Application__glucose 0
+CHANNEL Application__inputCalories BRBW 40 1 OUT Application__SmartphoneAppInterface IN Application__SmartphoneAppController
+VCCHANNEL Application__inputCalories 0
+CHANNEL Application__pumpBasal BRBW 40 8 OUT Application__SmartphoneAppController IN Application__PumpController
+VCCHANNEL Application__pumpBasal 0
+CHANNEL Application__pumpBolus BRBW 40 8 OUT Application__SmartphoneAppController IN Application__PumpController
+VCCHANNEL Application__pumpBolus 0
+CHANNEL Application__reservoir BRNBW 40 OUT Application__ReservoirSensor IN Application__PumpController
+VCCHANNEL Application__reservoir 0
+
+// Events
+EVENT Application__batteryE__Application__batteryE(int) NIB 8 Application__BatterySensor Application__PumpController
+EVENT Application__emergencyResponseE__Application__emergencyResponseE() NIB 8 Application__MedicalInformationSystem Application__SmartphoneAppController
+EVENT Application__emergencySignE__Application__emergencySignE() NIB 8 Application__SmartphoneAppController Application__MedicalInformationSystem
+EVENT Application__feedback4AppE__Application__feedback4AppE(int, int, int) NIB 8 Application__PumpController Application__SmartphoneAppController
+EVENT Application__feedback4InterfaceE__Application__feedback4InterfaceE(int, int, int) NIB 8 Application__SmartphoneAppController Application__SmartphoneAppInterface
+EVENT Application__glucoseE__Application__glucoseE(int) NIB 8 Application__GlucoseLevelSensor Application__SmartphoneAppController
+EVENT Application__inputCaloriesE__Application__inputCaloriesE(int) NIB 8 Application__SmartphoneAppInterface Application__SmartphoneAppController
+EVENT Application__pumpBasalE__Application__pumpBasalE(int) NIB 8 Application__SmartphoneAppController Application__PumpController
+EVENT Application__pumpBolusE__Application__pumpBolusE(int) NIB 8 Application__SmartphoneAppController Application__PumpController
+EVENT Application__reservoirE__Application__reservoirE(int) NIB 8 Application__ReservoirSensor Application__PumpController
+EVENT Application__resetAppTimerBasal__Application__resetAppTimerBasal() NIB 8 Application__SmartphoneAppController Application__AppControllerTimerBasal
+EVENT Application__resetAppTimer__Application__resetAppTimer() NIB 8 Application__SmartphoneAppController Application__AppControllerTimer
+EVENT Application__resetInterfaceTimer__Application__resetInterfaceTimer() NIB 8 Application__SmartphoneAppInterface Application__AppInterfaceTimer
+EVENT Application__resetTimer__Application__resetTimer() NIB 8 Application__PumpController Application__PumpControllerTimer
+EVENT Application__startPumping__Application__startPumping() NIB 8 Application__PumpController Application__PumpActuator
+EVENT Application__stopPumping__Application__stopPumping() NIB 8 Application__PumpController Application__PumpActuator
+EVENT Application__timeout4Basal__Application__timeout4Basal() NIB 8 Application__AppControllerTimerBasal Application__SmartphoneAppController
+EVENT Application__timeout4CtrlFeedback__Application__timeout4CtrlFeeback() NIB 8 Application__PumpControllerTimer Application__PumpController
+EVENT Application__timeout4Eat__Application__timeout4Eat() NIB 8 Application__AppInterfaceTimer Application__SmartphoneAppInterface
+EVENT Application__timeout4Feedback__Application__timeout4Feedback() NIB 8 Application__AppControllerTimer Application__SmartphoneAppController
+
+// Requests
+
+TASK Application__AppControllerTimer
+    TASKOP
+    //Local variables
+    int loop_0 = 0
+    
+    //Behavior
+    FOR(loop_0 = 0; loop_0<1; loop_0 = loop_0 + 1)
+        WAIT Application__resetAppTimer__Application__resetAppTimer
+        DELAY 10 ms isActiveDelay false
+        NOTIFY Application__timeout4Feedback__Application__timeout4Feedback
+    ENDFOR
+ENDTASK
+
+TASK Application__AppControllerTimerBasal
+    TASKOP
+    //Local variables
+    int loop_0 = 0
+    
+    //Behavior
+    FOR(loop_0 = 0; loop_0<1; loop_0 = loop_0 + 1)
+        WAIT Application__resetAppTimerBasal__Application__resetAppTimerBasal
+        DELAY 10 ms isActiveDelay false
+        NOTIFY Application__timeout4Basal__Application__timeout4Basal
+    ENDFOR
+ENDTASK
+
+TASK Application__AppInterfaceTimer
+    TASKOP
+    //Local variables
+    int loop_0 = 0
+    
+    //Behavior
+    FOR(loop_0 = 0; loop_0<1; loop_0 = loop_0 + 1)
+        WAIT Application__resetInterfaceTimer__Application__resetInterfaceTimer
+        DELAY 100 ms isActiveDelay false
+        NOTIFY Application__timeout4Eat__Application__timeout4Eat
+    ENDFOR
+ENDTASK
+
+TASK Application__BatterySensor
+    TASKOP
+    //Local variables
+    int level
+    int loop_0 = 0
+    
+    //Behavior
+    FOR(loop_0 = 0; loop_0<1; loop_0 = loop_0 + 1)
+        DELAY 10 ms isActiveDelay false
+        RANDOM 0 level 0 2
+        NOTIFY Application__batteryE__Application__batteryE level
+        WRITE Application__battery 1
+    ENDFOR
+ENDTASK
+
+TASK Application__GlucoseLevelSensor
+    TASKOP
+    //Local variables
+    int level
+    int loop_0 = 0
+    
+    //Behavior
+    FOR(loop_0 = 0; loop_0<1; loop_0 = loop_0 + 1)
+        DELAY 10 ms isActiveDelay false
+        RANDOM 0 level 1 3
+        NOTIFY Application__glucoseE__Application__glucoseE level
+        WRITE Application__glucose 1
+    ENDFOR
+ENDTASK
+
+TASK Application__MedicalInformationSystem
+    TASKOP
+    //Local variables
+    int loop_0 = 0
+    
+    //Behavior
+    FOR(loop_0 = 0; loop_0<1; loop_0 = loop_0 + 1)
+        WAIT Application__emergencySignE__Application__emergencySignE
+        EXECC 100 AES_Emergency SE 100 100 0 0 - - 2
+        READ Application__emergencySign 1+0 AES_Emergency
+        EXECI 5000
+        NOTIFY Application__emergencyResponseE__Application__emergencyResponseE
+    ENDFOR
+ENDTASK
+
+TASK Application__PumpActuator
+    TASKOP
+    //Local variables
+    int loop_0 = 0
+    
+    //Behavior
+    FOR(loop_0 = 0; loop_0<1; loop_0 = loop_0 + 1)
+        SELECTEVT
+            CASE Application__startPumping__Application__startPumping
+                EXECI 10000
+            ENDCASE
+            CASE Application__stopPumping__Application__stopPumping
+                EXECI 10000
+            ENDCASE
+        ENDSELECTEVT
+    ENDFOR
+ENDTASK
+
+TASK Application__PumpController
+    TASKOP
+    //Local variables
+    int batteryLevel = 2
+    int reservoirLevel = 2
+    int pumpingStatus = 0
+    int basal
+    int bolus
+    int insulineToPump = 0
+    int i
+    int x
+    int loop_0 = 0
+    
+    //Behavior
+    NOTIFY Application__resetTimer__Application__resetTimer
+    FOR(loop_0 = 0; loop_0<10; loop_0 = loop_0 + 1)
+        SELECTEVT
+            CASE Application__timeout4CtrlFeedback__Application__timeout4CtrlFeeback
+                NOTIFY Application__feedback4AppE__Application__feedback4AppE batteryLevel reservoirLevel pumpingStatus
+                EXECC 100 AES_CTRL SE 100 100 0 0 - - 1
+                WRITE Application__feedback4App 1+0 AES_CTRL
+            ENDCASE
+            CASE Application__reservoirE__Application__reservoirE reservoirLevel
+                READ Application__reservoir 1
+            ENDCASE
+            CASE Application__batteryE__Application__batteryE batteryLevel
+                READ Application__battery 1
+            ENDCASE
+            CASE Application__pumpBolusE__Application__pumpBolusE bolus
+                READ Application__pumpBolus 1
+                IF (pumpingStatus==1)
+                    NOTIFY Application__stopPumping__Application__stopPumping
+                    pumpingStatus=0
+                ELSE
+                ENDIF
+                insulineToPump=insulineToPump+bolus*10
+                NOTIFY Application__startPumping__Application__startPumping
+                pumpingStatus=1
+                FOR(i=insulineToPump; i>0; i=i-1)
+                    DELAY 1 ms isActiveDelay false
+                ENDFOR
+                NOTIFY Application__stopPumping__Application__stopPumping
+                pumpingStatus=0
+            ENDCASE
+            CASE Application__pumpBasalE__Application__pumpBasalE basal
+                READ Application__pumpBasal 1
+                IF (pumpingStatus==0)
+                    insulineToPump=5
+                    NOTIFY Application__startPumping__Application__startPumping
+                    pumpingStatus=1
+                    FOR(i=insulineToPump; i>0; i=i-1)
+                        DELAY 1 ms isActiveDelay false
+                    ENDFOR
+                    NOTIFY Application__stopPumping__Application__stopPumping
+                    pumpingStatus=0
+                ELSE
+                ENDIF
+            ENDCASE
+        ENDSELECTEVT
+    ENDFOR
+ENDTASK
+
+TASK Application__PumpControllerTimer
+    TASKOP
+    //Local variables
+    int loop_0 = 0
+    
+    //Behavior
+    FOR(loop_0 = 0; loop_0<1; loop_0 = loop_0 + 1)
+        WAIT Application__resetTimer__Application__resetTimer
+        DELAY 10 ms isActiveDelay false
+        NOTIFY Application__timeout4CtrlFeedback__Application__timeout4CtrlFeeback
+    ENDFOR
+ENDTASK
+
+TASK Application__ReservoirSensor
+    TASKOP
+    //Local variables
+    int level
+    int loop_0 = 0
+    
+    //Behavior
+    FOR(loop_0 = 0; loop_0<1; loop_0 = loop_0 + 1)
+        DELAY 10 ms isActiveDelay false
+        RANDOM 0 level 0 2
+        NOTIFY Application__reservoirE__Application__reservoirE level
+        WRITE Application__reservoir 1
+    ENDFOR
+ENDTASK
+
+TASK Application__SmartphoneAppController
+    TASKOP
+    //Local variables
+    int calories
+    int glucoseLevel
+    int batteryLevel
+    int reservoirLevel
+    int pumpingStatus
+    int insulinToPump
+    int basal
+    int bolus
+    int contCriticalLevel
+    int x
+    int criticalSituation = 0
+    int i
+    
+    //Behavior
+    calories=0
+    bolus=0
+    contCriticalLevel=0
+    NOTIFY Application__resetAppTimer__Application__resetAppTimer
+    FOR(i=0; i<1; i = i+1)
+        SELECTEVT
+            CASE Application__feedback4AppE__Application__feedback4AppE batteryLevel reservoirLevel pumpingStatus
+                READ Application__feedback4App 1+0 AES_CTRL
+                EXECC 100 AES_CTRL SE 100 100 0 0 - - 2
+            ENDCASE
+            CASE Application__timeout4Basal__Application__timeout4Basal
+                NOTIFY Application__pumpBasalE__Application__pumpBasalE basal
+                WRITE Application__pumpBasal 1
+            ENDCASE
+            CASE Application__timeout4Feedback__Application__timeout4Feedback
+                NOTIFY Application__feedback4InterfaceE__Application__feedback4InterfaceE glucoseLevel batteryLevel reservoirLevel
+                WRITE Application__feedback4Interface 1
+            ENDCASE
+            CASE Application__glucoseE__Application__glucoseE glucoseLevel
+                READ Application__glucose 1
+                IF (glucoseLevel==1)
+                    contCriticalLevel=contCriticalLevel+1
+                    IF (contCriticalLevel==10)
+                        criticalSituation=1
+                        NOTIFY Application__emergencySignE__Application__emergencySignE
+                        EXECC 100 AES_Emergency SE 100 100 0 0 - - 1
+                        WRITE Application__emergencySign 1+0 AES_Emergency
+                        WAIT Application__emergencyResponseE__Application__emergencyResponseE
+                    ELSE
+                    ENDIF
+                ELSE
+                    contCriticalLevel=0
+                    criticalSituation=0
+                ENDIF
+            ENDCASE
+            CASE Application__inputCaloriesE__Application__inputCaloriesE calories
+                READ Application__inputCalories 1
+                bolus=calories
+                NOTIFY Application__pumpBolusE__Application__pumpBolusE bolus
+                WRITE Application__pumpBolus 1
+            ENDCASE
+        ENDSELECTEVT
+    ENDFOR
+ENDTASK
+
+TASK Application__SmartphoneAppInterface
+    TASKOP
+    //Local variables
+    int calories
+    int glucoseLevel
+    int batteryLevel
+    int reservoirLevel
+    int pumpingStatus
+    int loop_0 = 0
+    
+    //Behavior
+    calories=0
+    NOTIFY Application__resetInterfaceTimer__Application__resetInterfaceTimer
+    FOR(loop_0 = 0; loop_0<1; loop_0 = loop_0 + 1)
+        SELECTEVT
+            CASE Application__timeout4Eat__Application__timeout4Eat
+                RANDOM 0 calories 1 3
+                NOTIFY Application__inputCaloriesE__Application__inputCaloriesE calories
+                WRITE Application__inputCalories 1
+                NOTIFY Application__resetInterfaceTimer__Application__resetInterfaceTimer
+                calories=0
+            ENDCASE
+            CASE Application__feedback4InterfaceE__Application__feedback4InterfaceE glucoseLevel batteryLevel reservoirLevel
+                READ Application__feedback4Interface 1
+            ENDCASE
+        ENDSELECTEVT
+    ENDFOR
+ENDTASK
+
-- 
GitLab