source: trunk/autoquest-plugin-uml-test/src/test/java/de/ugoe/cs/autoquest/plugin/uml/UMLUtilsTest.java @ 1917

Last change on this file since 1917 was 1917, checked in by sherbold, 9 years ago
  • updated tests
  • Property svn:mime-type set to text/plain
File size: 18.6 KB
Line 
1//   Copyright 2012 Georg-August-Universität Göttingen, Germany
2//
3//   Licensed under the Apache License, Version 2.0 (the "License");
4//   you may not use this file except in compliance with the License.
5//   You may obtain a copy of the License at
6//
7//       http://www.apache.org/licenses/LICENSE-2.0
8//
9//   Unless required by applicable law or agreed to in writing, software
10//   distributed under the License is distributed on an "AS IS" BASIS,
11//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12//   See the License for the specific language governing permissions and
13//   limitations under the License.
14
15package de.ugoe.cs.autoquest.plugin.uml;
16
17import java.io.File;
18import java.util.Collection;
19import java.util.Iterator;
20import java.util.LinkedList;
21import java.util.List;
22import java.util.Random;
23import java.util.logging.Level;
24
25import org.apache.commons.lang.SerializationUtils;
26import org.eclipse.uml2.uml.Interaction;
27import org.eclipse.uml2.uml.Model;
28import org.eclipse.uml2.uml.StateMachine;
29import org.eclipse.uml2.uml.Transition;
30import org.eclipse.uml2.uml.UMLPackage;
31import org.junit.After;
32import org.junit.BeforeClass;
33import org.junit.Test;
34
35import de.fraunhofer.fokus.testing.ModelUtils;
36import de.ugoe.cs.autoquest.eventcore.Event;
37import de.ugoe.cs.autoquest.plugin.http.HTTPLogParser;
38import de.ugoe.cs.autoquest.plugin.http.HTTPUtils;
39import de.ugoe.cs.autoquest.plugin.http.eventcore.SOAPEventType;
40import de.ugoe.cs.autoquest.plugin.uml.eventcore.UMLTransitionType;
41import de.ugoe.cs.autoquest.testgeneration.RandomWalkGenerator;
42import de.ugoe.cs.autoquest.usageprofiles.FirstOrderMarkovModel;
43import de.ugoe.cs.autoquest.usageprofiles.IStochasticProcess;
44import de.ugoe.cs.util.console.TextConsole;
45
46/**
47 * <p>
48 * Tests for AutoQUESTs UMLUtils
49 * </p>
50 *
51 * @author Steffen Herbold
52 */
53public class UMLUtilsTest {
54
55    private final static String OUTPUT_DIR = "target/tmp/test-outputs/";
56
57    @BeforeClass
58    public static void setUpBeforeClass() throws Exception {
59        new TextConsole(Level.INFO);
60    }
61   
62    @After
63    public void tearDown() throws Exception {
64        deleteFiles(new File(OUTPUT_DIR));
65    }
66
67    @Test(expected = java.lang.RuntimeException.class)
68    public void testCreateUMLTransitionSequence_1() throws Exception {
69        // parse log file
70        HTTPLogParser parser = new HTTPLogParser();
71        parser.parseFile(new File(ClassLoader.getSystemResource("createSequence_1_usagedata.log")
72            .getFile()));
73        Collection<List<Event>> httpSequences = parser.getSequences();
74        Model model =
75            ModelUtils.loadModel(ClassLoader
76                .getSystemResourceAsStream("createSequence_1_model.uml"));
77
78        StateMachine stateMachine =
79            (StateMachine) model.getPackagedElement("PatientIDBehavior", true,
80                                                    UMLPackage.Literals.STATE_MACHINE, true);
81
82        Collection<List<Event>> umlSequences = new LinkedList<>();
83        for (List<Event> httpSequence : httpSequences) {
84            for (Iterator<Event> eventIter = httpSequence.iterator(); eventIter.hasNext();) {
85                Event event = eventIter.next();
86                if (!(event.getType() instanceof SOAPEventType)) {
87                    eventIter.remove();
88                }
89                else {
90                    if (!event.getType().toString().contains("ixsmq")) {
91                        eventIter.remove();
92                    }
93                }
94            }
95
96            umlSequences.add(UMLUtils.createUMLTransitionSequence(httpSequence, stateMachine));
97        }
98    }
99
100    @Test
101    public void testConvertStateMachineToUsageProfile_1() throws Exception {
102        // parse log file
103        HTTPLogParser parser = new HTTPLogParser();
104        parser.parseFile(new File(ClassLoader.getSystemResource("createSequence_1_usagedata.log")
105            .getFile()));
106        Collection<List<Event>> httpSequences = parser.getSequences();
107        Model model =
108            ModelUtils.loadModel(ClassLoader
109                .getSystemResourceAsStream("createSequence_1_model.uml"));
110
111        StateMachine stateMachine =
112            (StateMachine) model.getPackagedElement("PatientIDBehavior", true,
113                                                    UMLPackage.Literals.STATE_MACHINE, true);
114
115        Collection<List<Event>> umlSequences = new LinkedList<>();
116        for (List<Event> httpSequence : httpSequences) {
117            for (Iterator<Event> eventIter = httpSequence.iterator(); eventIter.hasNext();) {
118                Event event = eventIter.next();
119                if (!(event.getType() instanceof SOAPEventType)) {
120                    eventIter.remove();
121                }
122                else {
123                    if (!event.getType().toString().contains("ixsmq")) {
124                        eventIter.remove();
125                    }
126                }
127            }
128
129            List<List<Transition>> matchingSequences =
130                UMLUtils.determineMatchingTransitionSequences(httpSequence, stateMachine);
131            if (matchingSequences.size() >= 1) {
132                List<Event> umlEventSequence = new LinkedList<>();
133                for (Transition transition : matchingSequences.get(0)) {
134                    umlEventSequence.add(new Event(new UMLTransitionType(transition)));
135                }
136                umlSequences.add(umlEventSequence);
137            }
138        }
139        UMLUtils.convertStateMachineToUsageProfile(umlSequences, stateMachine);
140
141        ModelUtils.writeModelToFile(model, OUTPUT_DIR + "convertStateMachineToUsageProfile_1.uml");
142    }
143
144    @Test
145    public void testCreateInteractionFromEventSequence_1() throws Exception {
146        // parse log file
147        HTTPLogParser parser =
148            new HTTPLogParser(new File(ClassLoader
149                .getSystemResource("testCreateInteractionFromEventSequence_1_properties.txt")
150                .getFile()));
151        parser
152            .parseFile(new File(ClassLoader
153                .getSystemResource("testCreateInteractionFromEventSequence_1_usagedata.log")
154                .getFile()));
155        Collection<List<Event>> httpSequences = parser.getSequences();
156
157        Model model =
158            ModelUtils.loadModel(ClassLoader
159                .getSystemResourceAsStream("testCreateInteractionFromEventSequence_1_model.uml"));
160
161        for (List<Event> httpSequence : httpSequences) {
162            for (Iterator<Event> eventIter = httpSequence.iterator(); eventIter.hasNext();) {
163                Event event = eventIter.next();
164                if (!(event.getType() instanceof SOAPEventType)) {
165                    eventIter.remove();
166                }
167            }
168
169            UMLUtils.createInteractionFromEventSequence(httpSequence, model, "testSequence", null);
170        }
171
172        ModelUtils.writeModelToFile(model, OUTPUT_DIR + "testCreateInteractionFromEventSequence_1_result.uml");
173    }
174   
175    @Test
176    public void testCreateInteractionFromEventSequence_2() throws Exception {
177        // parse log file
178        HTTPLogParser parser =
179            new HTTPLogParser(new File(ClassLoader
180                .getSystemResource("testCreateInteractionFromEventSequence_2_properties.txt")
181                .getFile()));
182        parser
183            .parseFile(new File(ClassLoader
184                .getSystemResource("testCreateInteractionFromEventSequence_2_usagedata.log")
185                .getFile()));
186        Collection<List<Event>> httpSequences = parser.getSequences();
187
188        Model model =
189            ModelUtils.loadModel(ClassLoader
190                .getSystemResourceAsStream("testCreateInteractionFromEventSequence_2_model.uml"));
191
192        for (List<Event> httpSequence : httpSequences) {
193            for (Iterator<Event> eventIter = httpSequence.iterator(); eventIter.hasNext();) {
194                Event event = eventIter.next();
195                if (!(event.getType() instanceof SOAPEventType)) {
196                    eventIter.remove();
197                }
198            }
199
200            UMLUtils.createInteractionFromEventSequence(httpSequence, model, "testSequence", null);
201        }
202
203        ModelUtils.writeModelToFile(model, OUTPUT_DIR + "testCreateInteractionFromEventSequence_1_result.uml");
204    }
205   
206    @Test
207    public void testCalculateUsageScore_1() throws Exception {
208        // parse log file
209        HTTPLogParser parser =
210            new HTTPLogParser(new File(ClassLoader
211                .getSystemResource("testCalculateUsageScore_1_properties.txt").getFile()));
212        parser.parseFile(new File(ClassLoader
213            .getSystemResource("testCalculateUsageScore_1_usagedata.log").getFile()));
214        Collection<List<Event>> httpSequences = parser.getSequences();
215
216        Model model =
217            ModelUtils.loadModel(ClassLoader
218                .getSystemResourceAsStream("testCalculateUsageScore_1_model.uml"));
219
220        Collection<List<Event>> simpleSOAPSequences = new LinkedList<>();
221        for (List<Event> httpSequence : httpSequences) {
222            simpleSOAPSequences.add(HTTPUtils.convertToSimpleSOAPEvent(httpSequence, true));
223        }
224
225        FirstOrderMarkovModel usageProfile = new FirstOrderMarkovModel(new Random(1));
226        usageProfile.train(simpleSOAPSequences);
227
228        Collection<List<Event>> genSeqs =
229            (new RandomWalkGenerator(10, 1, 100, true, 500)).generateTestSuite(usageProfile);
230
231        int i = 1;
232        int[] lengths = new int[genSeqs.size()];
233        for (List<Event> seq : genSeqs) {
234            UMLUtils.createInteractionFromEventSequence(seq, model, "seq_" + i, null);
235            lengths[i - 1] = seq.size();
236            i++;
237        }
238        for (int j = 0; j < genSeqs.size(); j++) {
239            Interaction interaction =
240                (Interaction) model.getPackagedElement("seq_" + j, true,
241                                                       UMLPackage.Literals.INTERACTION, true);
242            double usageScore = UMLUtils.calculateUsageScore(interaction, usageProfile);
243            System.out.format("usage score %02d: %.2f \t %d\n", j + 1, usageScore, lengths[j]);
244        }
245    }
246   
247    @Test
248    public void testCreateScheduling_1() throws Exception {
249        Model model =
250                ModelUtils.loadModel(ClassLoader
251                    .getSystemResourceAsStream("testCreateScheduling_1_testsuite.uml"));
252       
253        IStochasticProcess usageProfile = (IStochasticProcess) SerializationUtils.deserialize(ClassLoader.getSystemResourceAsStream("testCreateScheduling_1_usageprofile.dat"));
254       
255        UMLUtils.createScheduling(model, usageProfile, null);
256       
257        ModelUtils.writeModelToFile(model, OUTPUT_DIR + "testCreateScheduling_1_result.uml");
258    }
259   
260    @Test
261    public void testValidateModelWithLog_1() throws Exception {
262        HTTPLogParser parser =
263                new HTTPLogParser(new File(ClassLoader
264                    .getSystemResource("testCreateInteractionFromEventSequence_1_properties.txt")
265                    .getFile()));
266        parser
267            .parseFile(new File(ClassLoader
268                .getSystemResource("testCreateInteractionFromEventSequence_1_usagedata.log")
269                .getFile()));
270        Collection<List<Event>> httpSequences = parser.getSequences();
271
272       
273        Model model =
274            ModelUtils.loadModel(ClassLoader
275                .getSystemResourceAsStream("testCreateInteractionFromEventSequence_1_model.uml"));
276       
277        int violations = UMLUtils.validateModelWithLog(httpSequences, model, null);
278        if( violations==0 ) {
279            System.out.println("No problems found.");
280        } else {
281                System.out.println(violations + " violations found.");
282        }
283    }
284   
285    @Test
286    public void testValidateModelWithLog_2() throws Exception {
287        HTTPLogParser parser =
288                new HTTPLogParser(new File(ClassLoader
289                    .getSystemResource("testCreateInteractionFromEventSequence_2_properties.txt")
290                    .getFile()));
291        parser
292            .parseFile(new File(ClassLoader
293                .getSystemResource("testCreateInteractionFromEventSequence_2_usagedata.log")
294                .getFile()));
295        Collection<List<Event>> httpSequences = parser.getSequences();
296
297       
298        Model model =
299            ModelUtils.loadModel(ClassLoader
300                .getSystemResourceAsStream("testCreateInteractionFromEventSequence_2_model.uml"));
301       
302        int violations = UMLUtils.validateModelWithLog(httpSequences, model, null);
303        if( violations==0 ) {
304            System.out.println("No problems found.");
305        } else {
306            System.out.println(violations + " violations found.");
307        }
308    }
309   
310    @Test
311    public void testValidateModelWithLog_HL7_RLUS_v3() throws Exception {
312        HTTPLogParser parser =
313                new HTTPLogParser(new File(ClassLoader
314                    .getSystemResource("hl7_servicenamemap.txt")
315                    .getFile()));
316        parser
317            .parseFile(new File(ClassLoader
318                .getSystemResource("testCreateInteractionFromEventSequence_1_usagedata.log")
319                .getFile()));
320        Collection<List<Event>> httpSequences = parser.getSequences();
321
322       
323        Model model =
324            ModelUtils.loadModel(ClassLoader
325                .getSystemResourceAsStream("hl7model_v3.uml"));
326       
327        int violations = UMLUtils.validateModelWithLog(httpSequences, model, "RLUSTestSuite_1");
328        if( violations==0 ) {
329            System.out.println("No problems found.");
330        } else {
331            System.out.println(violations + " violations found.");
332        }
333       
334        // remove everything but rlusService from sequences
335        for (List<Event> httpSequence : httpSequences) {
336            for (Iterator<Event> eventIter = httpSequence.iterator(); eventIter.hasNext();) {
337                Event event = eventIter.next();
338                if (!(event.getType() instanceof SOAPEventType)) {
339                    eventIter.remove();
340                } else {
341                    SOAPEventType eventType = (SOAPEventType) event.getType();
342                    if( !"rlusService".equals(eventType.getServiceName()) )  {
343                        eventIter.remove();
344                    }
345                }
346            }
347           
348            UMLUtils.createInteractionFromEventSequence(httpSequence, model, "foo", "RLUSTestSuite_1");
349        }
350       
351        ModelUtils.writeModelToFile(model, OUTPUT_DIR + "hl7_v3_result.uml");
352    }
353   
354    @Test
355    public void testValidateModelWithLog_HL7_IXS_v3() throws Exception {
356        HTTPLogParser parser =
357                new HTTPLogParser(new File(ClassLoader
358                    .getSystemResource("hl7_ixs_servicenamemap.txt")
359                    .getFile()));
360        parser
361            .parseFile(new File(ClassLoader
362                .getSystemResource("testCreateInteractionFromEventSequence_1_usagedata.log")
363                .getFile()));
364        Collection<List<Event>> httpSequences = parser.getSequences();
365
366       
367        Model model =
368            ModelUtils.loadModel(ClassLoader
369                .getSystemResourceAsStream("hl7model_v3.uml"));
370       
371        int violations = UMLUtils.validateModelWithLog(httpSequences, model, "IXSTestSuite_1");
372        if( violations==0 ) {
373            System.out.println("No problems found.");
374        } else {
375            System.out.println(violations + " violations found.");
376        }
377       
378        // remove everything but rlusService from sequences
379        for (List<Event> httpSequence : httpSequences) {
380            for (Iterator<Event> eventIter = httpSequence.iterator(); eventIter.hasNext();) {
381                Event event = eventIter.next();
382                if (!(event.getType() instanceof SOAPEventType)) {
383                    eventIter.remove();
384                } else {
385                    SOAPEventType eventType = (SOAPEventType) event.getType();
386                    if( !"ixsService".equals(eventType.getServiceName()) )  {
387                        eventIter.remove();
388                    }
389                }
390            }
391           
392            UMLUtils.createInteractionFromEventSequence(httpSequence, model, "foo", "IXSTestSuite_1");
393        }
394       
395        ModelUtils.writeModelToFile(model, OUTPUT_DIR + "hl7_v3_result.uml");
396    }
397   
398    @Test
399    public void testValidateModelWithLog_ITA_v2() throws Exception {
400        HTTPLogParser parser =
401                new HTTPLogParser(new File(ClassLoader
402                    .getSystemResource("ita_v2_servicenamemap.txt")
403                    .getFile()));
404        parser
405            .parseFile(new File(ClassLoader
406                .getSystemResource("ita_usagejournal_v2_2.log")
407                .getFile()));
408        Collection<List<Event>> httpSequences = parser.getSequences();
409
410       
411        Model model =
412            ModelUtils.loadModel(ClassLoader
413                .getSystemResourceAsStream("ita_model_v2.uml"));
414       
415        int violations = UMLUtils.validateModelWithLog(httpSequences, model, null);
416        if( violations==0 ) {
417            System.out.println("No problems found.");
418        } else {
419            System.out.println(violations + " violations found.");
420        }
421       
422        // remove everything but transport from sequences
423        for (List<Event> httpSequence : httpSequences) {
424            for (Iterator<Event> eventIter = httpSequence.iterator(); eventIter.hasNext();) {
425                Event event = eventIter.next();
426                if (!(event.getType() instanceof SOAPEventType)) {
427                    eventIter.remove();
428                } else {
429                    SOAPEventType eventType = (SOAPEventType) event.getType();
430                    if( !"TransportService".equals(eventType.getServiceName()) )  {
431                        eventIter.remove();
432                    }
433                }
434            }
435           
436            UMLUtils.createInteractionFromEventSequence(httpSequence, model, "foo", "LogisticsTestSuite");
437        }
438       
439        ModelUtils.writeModelToFile(model, OUTPUT_DIR + "ita_v2_result.uml");
440       
441    }
442
443    private void deleteFiles(File file) {
444        if (file.exists()) {
445            if (file.isDirectory()) {
446                for (File child : file.listFiles()) {
447                    deleteFiles(child);
448                }
449            }
450
451            try {
452                file.delete();
453            }
454            catch (Exception e) {
455                // ignore and delete as much as possible
456            }
457        }
458    }
459
460}
Note: See TracBrowser for help on using the repository browser.