| /******************************************************************************* |
| * Copyright (c) 2010-2015, Tamas Borbas, Istvan Rath and Daniel Varro |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Tamas Borbas - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.viatra.modelobfuscator.tests |
| |
| import org.eclipse.emf.common.util.URI |
| import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl |
| import org.eclipse.uml2.uml.Model |
| import org.eclipse.uml2.uml.UMLFactory |
| import org.eclipse.viatra.modelobfuscator.emf.uml.UMLObfuscatorBuilder |
| import org.eclipse.viatra.modelobfuscator.util.ObfuscatorUtil |
| import org.junit.Test |
| |
| import static org.junit.Assert.* |
| |
| class SimpleUMLObfuscatorTest { |
| extension UMLFactory umlFactory = UMLFactory.eINSTANCE |
| private static final String TESTMODEL_NAME = "MyModel" |
| |
| @Test |
| def void invokeObfuscatorNoSaltTest() { |
| |
| println("Salt NOT used for obfuscation") |
| |
| val rs = new ResourceSetImpl() |
| val r = rs.createResource(URI.createURI("dummy")) |
| |
| val model = createModel => [ |
| name = TESTMODEL_NAME |
| ] |
| r.contents += model |
| val className = "C1" |
| val class1 = model.createOwnedClass(className, false) |
| val class2 = model.createOwnedClass(className, false) |
| model.createOwnedClass("MyClass", false) |
| model.createOwnedClass("MyAbstractClass", true) |
| val classWithEmptyName = model.createOwnedClass("", true) |
| val classWithNullName = model.createOwnedClass(null, true) |
| |
| printUMLModel(model) |
| |
| val obfuscator = UMLObfuscatorBuilder.create.setInput(rs).setSalt("").setPrefix("").build |
| println("Seed: " + obfuscator.stringObfuscator.seed) |
| obfuscator.obfuscate |
| |
| printUMLModel(model) |
| |
| assertFalse("Obfuscator did not change model name", model.name == TESTMODEL_NAME) |
| assertTrue("Class names different", class1.name == class2.name) |
| assertTrue("Empty class name changed", classWithEmptyName.name == obfuscator.stringObfuscator.prefix) |
| assertTrue("Null class name changed", classWithNullName.name == null) |
| |
| assertTrue("Restored model name incorrect", TESTMODEL_NAME == obfuscator.stringObfuscator.restoreData(model.name)) |
| |
| } |
| |
| @Test |
| def void invokeObfuscatorWithSaltTest() { |
| |
| println("Salt used for obfuscation") |
| |
| val rs = new ResourceSetImpl() |
| val r = rs.createResource(URI.createURI("dummy")) |
| |
| val model = createModel => [ |
| name = TESTMODEL_NAME |
| ] |
| r.contents += model |
| val className = "C1" |
| val class1 = model.createOwnedClass(className, false) |
| val class2 = model.createOwnedClass(className, false) |
| model.createOwnedClass("MyClass", false) |
| model.createOwnedClass("MyAbstractClass", true) |
| val classWithEmptyName = model.createOwnedClass("", true) |
| val classWithNullName = model.createOwnedClass(null, true) |
| |
| printUMLModel(model) |
| |
| val obfuscator = UMLObfuscatorBuilder.create.setInput(rs).setSalt(ObfuscatorUtil.generateHexSeed(6)).build |
| println("Seed: " + obfuscator.stringObfuscator.seed) |
| println("Salt: " + obfuscator.stringObfuscator.salt) |
| obfuscator.obfuscate |
| |
| printUMLModel(model) |
| |
| assertFalse("Obfuscator did not change model name", model.name == TESTMODEL_NAME) |
| assertTrue("Class names different", class1.name == class2.name) |
| assertFalse("Empty class name not changed", classWithEmptyName.name == "") |
| assertTrue("Null class name changed", classWithNullName.name == null) |
| |
| assertTrue("Restored model name incorrect", TESTMODEL_NAME == obfuscator.stringObfuscator.restoreData(model.name)) |
| assertTrue("Restored empty class name", obfuscator.stringObfuscator.restoreData(classWithEmptyName.name) == "") |
| } |
| |
| @Test |
| def void invokeObfuscatorWithFilterTest() { |
| |
| println("Filter used for obfuscation") |
| |
| val rs = new ResourceSetImpl() |
| val r = rs.createResource(URI.createURI("dummy")) |
| val model = createModel => [ |
| name = TESTMODEL_NAME |
| ] |
| r.contents += model |
| val r2 = rs.createResource(URI.createURI("dummy2")) |
| val model2 = createModel => [ |
| name = "MyOtherModel" |
| ] |
| r2.contents += model2 |
| |
| printUMLModel(model) |
| printUMLModel(model2) |
| |
| // do not obfuscate second resource |
| val obfuscator = UMLObfuscatorBuilder.create.setInput(rs).setFilter[ |
| it == r2 |
| ].build |
| println("Seed: " + obfuscator.stringObfuscator.seed) |
| obfuscator.obfuscate |
| |
| printUMLModel(model) |
| printUMLModel(model2) |
| |
| assertFalse("Obfuscator did not change model name", model.name == TESTMODEL_NAME) |
| assertTrue("Obfuscator changed model2 name", model2.name == "MyOtherModel") |
| |
| } |
| |
| def printUMLModel(Model model) { |
| println( |
| ''' |
| Model: |
| Name: «model.name» |
| Classes: |
| «FOR ne : model.ownedMembers» |
| Name: «ne.name»«if(ne.name == null) "[null]"» |
| «ENDFOR» |
| ''') |
| } |
| } |