From 2123a3029e54ddf792d5691234aa2a3e0c46a006 Mon Sep 17 00:00:00 2001 From: Martin Goik <goik@hdm-stuttgart.de> Date: Sat, 18 Oct 2014 23:43:35 +0200 Subject: [PATCH] Alpha version Unix --> SQL --- Sda2/P/UnixSqlLdap/Jndi/usermanage/.gitignore | 2 + .../Jndi/usermanage/Schema/divers.sql | 3 + .../Jndi/usermanage/Schema/schema.sql | 29 +++++++ .../Jndi/usermanage/Testdata/group | 6 ++ .../Jndi/usermanage/Testdata/passwd | 10 +++ Sda2/P/UnixSqlLdap/Jndi/usermanage/pom.xml | 52 +++++++++++++ .../hdm_stuttgart/mi/sda2/usermanage/Cfg.java | 22 ++++++ .../mi/sda2/usermanage/Driver.java | 30 ++++++++ .../mi/sda2/usermanage/jdbc.properties | 6 ++ .../mi/sda2/usermanage/parse/Group.java | 75 +++++++++++++++++++ .../mi/sda2/usermanage/parse/ParseError.java | 18 +++++ .../mi/sda2/usermanage/parse/Parser.java | 47 ++++++++++++ .../mi/sda2/usermanage/parse/User.java | 54 +++++++++++++ .../sda2/usermanage/rdbms/RdbmsHandler.java | 74 ++++++++++++++++++ .../usermanage/src/main/java/log4j.properties | 13 ++++ .../mi/sda2/usermanage/UserTest.java | 14 ++++ 16 files changed, 455 insertions(+) create mode 100644 Sda2/P/UnixSqlLdap/Jndi/usermanage/.gitignore create mode 100644 Sda2/P/UnixSqlLdap/Jndi/usermanage/Schema/divers.sql create mode 100644 Sda2/P/UnixSqlLdap/Jndi/usermanage/Schema/schema.sql create mode 100644 Sda2/P/UnixSqlLdap/Jndi/usermanage/Testdata/group create mode 100644 Sda2/P/UnixSqlLdap/Jndi/usermanage/Testdata/passwd create mode 100644 Sda2/P/UnixSqlLdap/Jndi/usermanage/pom.xml create mode 100644 Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/de/hdm_stuttgart/mi/sda2/usermanage/Cfg.java create mode 100644 Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/de/hdm_stuttgart/mi/sda2/usermanage/Driver.java create mode 100644 Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/de/hdm_stuttgart/mi/sda2/usermanage/jdbc.properties create mode 100644 Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/de/hdm_stuttgart/mi/sda2/usermanage/parse/Group.java create mode 100644 Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/de/hdm_stuttgart/mi/sda2/usermanage/parse/ParseError.java create mode 100644 Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/de/hdm_stuttgart/mi/sda2/usermanage/parse/Parser.java create mode 100644 Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/de/hdm_stuttgart/mi/sda2/usermanage/parse/User.java create mode 100644 Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/de/hdm_stuttgart/mi/sda2/usermanage/rdbms/RdbmsHandler.java create mode 100644 Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/log4j.properties create mode 100644 Sda2/P/UnixSqlLdap/Jndi/usermanage/src/test/java/de/hdm_stuttgart/mi/sda2/usermanage/UserTest.java diff --git a/Sda2/P/UnixSqlLdap/Jndi/usermanage/.gitignore b/Sda2/P/UnixSqlLdap/Jndi/usermanage/.gitignore new file mode 100644 index 000000000..731eb433c --- /dev/null +++ b/Sda2/P/UnixSqlLdap/Jndi/usermanage/.gitignore @@ -0,0 +1,2 @@ +/target/ +/.settings/ diff --git a/Sda2/P/UnixSqlLdap/Jndi/usermanage/Schema/divers.sql b/Sda2/P/UnixSqlLdap/Jndi/usermanage/Schema/divers.sql new file mode 100644 index 000000000..ebf5eef1c --- /dev/null +++ b/Sda2/P/UnixSqlLdap/Jndi/usermanage/Schema/divers.sql @@ -0,0 +1,3 @@ +SELECT * from SysGroup; + +DELETE FROM SysGroup; \ No newline at end of file diff --git a/Sda2/P/UnixSqlLdap/Jndi/usermanage/Schema/schema.sql b/Sda2/P/UnixSqlLdap/Jndi/usermanage/Schema/schema.sql new file mode 100644 index 000000000..7872ea7d4 --- /dev/null +++ b/Sda2/P/UnixSqlLdap/Jndi/usermanage/Schema/schema.sql @@ -0,0 +1,29 @@ +DROP Table IF EXISTS SysUserGroup; +DROP Table IF EXISTS SysUser; +DROP Table IF EXISTS SysGroup; + +CREATE TABLE SysGroup ( -- The system's groups -- + id INTEGER AUTO_INCREMENT PRIMARY KEY + ,gid CHAR(20) NOT NULL UNIQUE -- The groups unique name e.g. 'users' -- + ,gidNumber INTEGER NOT NULL UNIQUE -- The groups unique numerical value e.g. 1332 -- +); + +UPDATE SysGroup SET id=20 WHERE id=2; + +CREATE TABLE SysUser ( + id INTEGER AUTO_INCREMENT PRIMARY KEY + ,uid CHAR(20) NOT NULL UNIQUE -- The user's unique login name e.g. 'goik' -- + ,uidNumber INTEGER NOT NULL UNIQUE -- The user's unique uid number value-- + ,primaryGidNumber INTEGER NOT NULL -- The user's primary group -- + REFERENCES SysGroup + ,cname VARCHAR(255) -- The user's common name e.g. 'Martin Goik' -- + ,homeDirectory VARCHAR(255) NOT NULL -- The user's home directory e.g. '/home/goik' -- + ,shell VARCHAR(255) NOT NULL -- The user's login shell e.g. '/bin/bash' -- +); + +CREATE TABLE SysUserGroup ( + sysuser INTEGER NOT NULL REFERENCES SysUser + ,sysgroup INTEGER NOT NULL REFERENCES SysGroup + ,PRIMARY KEY(sysuser, sysgroup) +) + diff --git a/Sda2/P/UnixSqlLdap/Jndi/usermanage/Testdata/group b/Sda2/P/UnixSqlLdap/Jndi/usermanage/Testdata/group new file mode 100644 index 000000000..aa788278d --- /dev/null +++ b/Sda2/P/UnixSqlLdap/Jndi/usermanage/Testdata/group @@ -0,0 +1,6 @@ +root:x:0: +daemon:x:1:julio,spinello +users:x:30: +admin:x:15: +guest:x:3: +extra:x:7:spinello diff --git a/Sda2/P/UnixSqlLdap/Jndi/usermanage/Testdata/passwd b/Sda2/P/UnixSqlLdap/Jndi/usermanage/Testdata/passwd new file mode 100644 index 000000000..b1ad5da70 --- /dev/null +++ b/Sda2/P/UnixSqlLdap/Jndi/usermanage/Testdata/passwd @@ -0,0 +1,10 @@ +root:x:0:0:root:/root:/bin/bash +bruch:x:2:30:Niesha Bruch:/home/bruch:/bin/bash +gastellum:x:3:30:Rueben Gastellum:/home/gastellum:/bin/tcsh +julio:x:4:30:Dewitt Julio:/home/julio:/bin/bash +spinello:x:7:15:Charisse Spinello:/home/spinello:/bin/bash +devereux:x:10:30:Luisa Devereux:/home/devereux:/bin/tcsh +sandlin:x:15:30:Domonique Sandlin:/home/sandlin:/bin/ksh +elkan:x:12:3:Brynn Elkan:/guest/elkan:/bin/bash +kham:x:17:3:Bettina Kham:/guest/kham:/bin/bash +vanwyhe:x:18:30:Juan Vanwyhe:/home/vanwyhe:/bin/ksh \ No newline at end of file diff --git a/Sda2/P/UnixSqlLdap/Jndi/usermanage/pom.xml b/Sda2/P/UnixSqlLdap/Jndi/usermanage/pom.xml new file mode 100644 index 000000000..807dce048 --- /dev/null +++ b/Sda2/P/UnixSqlLdap/Jndi/usermanage/pom.xml @@ -0,0 +1,52 @@ +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <groupId>de.hdm-stuttgart.mi.sda2</groupId> + <artifactId>usermanage</artifactId> + <version>0.9</version> + <packaging>jar</packaging> + + <name>mi-maven-archetype-quickstart</name> + <url>http://mi.hdm-stuttgart.de</url> + + <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + </properties> + + <dependencies> + <dependency> + <groupId>log4j</groupId> + <artifactId>log4j</artifactId> + <version>1.2.17</version> + </dependency> + + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>4.11</version> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>mysql</groupId> + <artifactId>mysql-connector-java</artifactId> + <version>5.1.33</version> + </dependency> + + </dependencies> + + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + <version>3.1</version> + <configuration> + <source>1.8</source> + <target>1.8</target> + </configuration> + </plugin> + </plugins> + </build> +</project> diff --git a/Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/de/hdm_stuttgart/mi/sda2/usermanage/Cfg.java b/Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/de/hdm_stuttgart/mi/sda2/usermanage/Cfg.java new file mode 100644 index 000000000..3553d9931 --- /dev/null +++ b/Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/de/hdm_stuttgart/mi/sda2/usermanage/Cfg.java @@ -0,0 +1,22 @@ +package de.hdm_stuttgart.mi.sda2.usermanage; + +import java.util.MissingResourceException; +import java.util.ResourceBundle; + +public class Cfg { + private static final String BUNDLE_NAME = "de.hdm_stuttgart.mi.sda2.usermanage.jdbc"; //$NON-NLS-1$ + + private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle + .getBundle(BUNDLE_NAME); + + private Cfg() { + } + + public static String get(String key) { + try { + return RESOURCE_BUNDLE.getString(key); + } catch (MissingResourceException e) { + return '!' + key + '!'; + } + } +} diff --git a/Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/de/hdm_stuttgart/mi/sda2/usermanage/Driver.java b/Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/de/hdm_stuttgart/mi/sda2/usermanage/Driver.java new file mode 100644 index 000000000..e497dfa0f --- /dev/null +++ b/Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/de/hdm_stuttgart/mi/sda2/usermanage/Driver.java @@ -0,0 +1,30 @@ +package de.hdm_stuttgart.mi.sda2.usermanage; + +import java.sql.SQLException; + +import de.hdm_stuttgart.mi.sda2.usermanage.parse.ParseError; +import de.hdm_stuttgart.mi.sda2.usermanage.parse.Parser; +import de.hdm_stuttgart.mi.sda2.usermanage.rdbms.RdbmsHandler; + +/** + * + * + */ +public class Driver { + public static void main(String[] args) { + try { + final RdbmsHandler dbHandler = new RdbmsHandler(); + dbHandler.connect(); + final Parser parser = new Parser(dbHandler, "Testdata/group", "Testdata/passwd"); + parser.insertData(); + + } catch (ParseError e) { + System.err.println(e.getMessage()); + System.exit(1); + } catch (SQLException e) { + System.err.println("Unable to connect to database server"); + System.exit(1); + } + } + +} diff --git a/Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/de/hdm_stuttgart/mi/sda2/usermanage/jdbc.properties b/Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/de/hdm_stuttgart/mi/sda2/usermanage/jdbc.properties new file mode 100644 index 000000000..055e35c0b --- /dev/null +++ b/Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/de/hdm_stuttgart/mi/sda2/usermanage/jdbc.properties @@ -0,0 +1,6 @@ +RdbmsHandler.driverClassName=com.mysql.jdbc.Driver + +# See http://stackoverflow.com/questions/2993251/jdbc-batch-insert-performance +RdbmsHandler.jdbcUrl=jdbc:mysql://localhost:3306/hdm?rewriteBatchedStatements=true +RdbmsHandler.password=XYZ +RdbmsHandler.user=hdmuser diff --git a/Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/de/hdm_stuttgart/mi/sda2/usermanage/parse/Group.java b/Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/de/hdm_stuttgart/mi/sda2/usermanage/parse/Group.java new file mode 100644 index 000000000..887b028e1 --- /dev/null +++ b/Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/de/hdm_stuttgart/mi/sda2/usermanage/parse/Group.java @@ -0,0 +1,75 @@ +package de.hdm_stuttgart.mi.sda2.usermanage.parse; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +import org.apache.log4j.Logger; + +public class Group { + + private static Logger log = Logger + .getLogger(Group.class); + + public static final Map<String, Set<Group>> secondaryGroupsByUid = new HashMap<String, Set<Group>>(); + public static final Set<Group> groups = new HashSet<Group>(); + + public Group(final String groupLine, int row) + throws ParseError { + + log.debug("Parsing group file line " + row + ":" + groupLine); + + int csvIndex = 0; + final String [] components = groupLine.split(":"); + log.debug("Found " + components.length + " CSV components"); + + // row 1 + gid = components[csvIndex++]; + + csvIndex++; // We ignore the second CSV entry ("x") in row 2 + + // row 3 + try { + gidNumber = Integer.parseInt(components[csvIndex++]); + } catch (NumberFormatException e) { + + throw new ParseError("is not an integer (group)", row, csvIndex, components[csvIndex]); + } + + // Optional row 4 + if (4 == components.length) { // Secondary memberships + for (String uid : components[csvIndex++].split(",")) { + log.debug("Adding secondary user '" + uid + "' to group '" + gid + "'"); + Set<Group> secondaryGroups = secondaryGroupsByUid.get(uid); + if (null == secondaryGroups) { + secondaryGroups = new HashSet<Group>(); + secondaryGroupsByUid.put(uid, secondaryGroups); + } + secondaryGroups.add(this); + } + } + groups.add(this); + } + public final String gid; + public final int gidNumber; + private int databaseId = 0; + + public int getDatabaseId() { + return databaseId; + } + public void setDatabaseId(int databaseId) { + this.databaseId = databaseId; + } + @Override + public int hashCode() { + return gidNumber; + } + @Override + public boolean equals(Object obj) { + if (obj instanceof Group) { + return gidNumber == ((Group)obj).gidNumber; + } + return super.equals(obj); + } +} diff --git a/Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/de/hdm_stuttgart/mi/sda2/usermanage/parse/ParseError.java b/Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/de/hdm_stuttgart/mi/sda2/usermanage/parse/ParseError.java new file mode 100644 index 000000000..15f4219d7 --- /dev/null +++ b/Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/de/hdm_stuttgart/mi/sda2/usermanage/parse/ParseError.java @@ -0,0 +1,18 @@ +package de.hdm_stuttgart.mi.sda2.usermanage.parse; + +public class ParseError extends Exception { + + private static final long serialVersionUID = -4595401874181463130L; + + public ParseError(final String msg) { + super(msg); + } + + public ParseError(final String explain, final int row, final int index, + final String fieldValue) { + + super("Line " + row + ", field " + index + ": Value " + fieldValue + + " " + explain); + + } +} diff --git a/Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/de/hdm_stuttgart/mi/sda2/usermanage/parse/Parser.java b/Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/de/hdm_stuttgart/mi/sda2/usermanage/parse/Parser.java new file mode 100644 index 000000000..4d57a6639 --- /dev/null +++ b/Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/de/hdm_stuttgart/mi/sda2/usermanage/parse/Parser.java @@ -0,0 +1,47 @@ +package de.hdm_stuttgart.mi.sda2.usermanage.parse; + +import java.io.BufferedReader; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; + + +import de.hdm_stuttgart.mi.sda2.usermanage.rdbms.RdbmsHandler; + +public class Parser { + + + final RdbmsHandler rdbmsHandler; + + public Parser(final RdbmsHandler rdbmsHandler, final String groupFile, final String passwdFile) + throws ParseError { + this.rdbmsHandler = rdbmsHandler; + + final BufferedReader groupStream = openFile(groupFile); + + try { + String line; + int lineNo = 1; + while ( null != (line = groupStream.readLine())){ + new Group(line, lineNo++); + } + } catch (IOException e) { + throw new ParseError("Unable to read from file '" + + groupFile+ "'"); + } + } + + public void insertData() { + rdbmsHandler.addGroups(Group.groups); + } + + BufferedReader openFile (final String filename) + throws ParseError { + try { + return new BufferedReader(new FileReader(filename)); + } catch (FileNotFoundException e) { + throw new ParseError("Unable to open file '" + filename + "' for reading"); + } + } + +} diff --git a/Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/de/hdm_stuttgart/mi/sda2/usermanage/parse/User.java b/Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/de/hdm_stuttgart/mi/sda2/usermanage/parse/User.java new file mode 100644 index 000000000..0d8ed37d6 --- /dev/null +++ b/Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/de/hdm_stuttgart/mi/sda2/usermanage/parse/User.java @@ -0,0 +1,54 @@ +package de.hdm_stuttgart.mi.sda2.usermanage.parse; + +public class User { + + + public User(final String passwdLine, int row) + throws ParseError { + + int csvIndex = 0; + final String [] components = passwdLine.split(":"); + + if (7 != components.length) { + + } + + // row 1 + uid = components[csvIndex++]; + + csvIndex++; // We ignore the second CSV entry ("x") in row 2 + + // row 3 + try { + uidNumber = Integer.parseInt(components[csvIndex++]); + } catch (NumberFormatException e) { + + throw new ParseError("is not an integer (passwd)", row, csvIndex, components[csvIndex]); + } + + // row 4 + try { + gidNumber = Integer.parseInt(components[csvIndex++]); + } catch (NumberFormatException e) { + + throw new ParseError("is not an integer (passwd)", row, csvIndex, components[csvIndex]); + } + + // row 5 + cname = components[csvIndex++]; + + // row 6 + homeDirectory = components[csvIndex++]; + + // row 7 + shell= components[csvIndex++]; + } + + public final String uid; + public final int uidNumber; + public final int gidNumber; + public final String cname; + public final String homeDirectory; + public final String shell; + +} diff --git a/Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/de/hdm_stuttgart/mi/sda2/usermanage/rdbms/RdbmsHandler.java b/Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/de/hdm_stuttgart/mi/sda2/usermanage/rdbms/RdbmsHandler.java new file mode 100644 index 000000000..591c90da6 --- /dev/null +++ b/Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/de/hdm_stuttgart/mi/sda2/usermanage/rdbms/RdbmsHandler.java @@ -0,0 +1,74 @@ +package de.hdm_stuttgart.mi.sda2.usermanage.rdbms; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.Set; + +import org.apache.log4j.Logger; + +import de.hdm_stuttgart.mi.sda2.usermanage.Cfg; +import de.hdm_stuttgart.mi.sda2.usermanage.parse.Group; + +public class RdbmsHandler { + + private static Logger log = Logger + .getLogger(RdbmsHandler.class); + + + private final String insertGroupSql = "INSERT INTO SysGroup (gid, gidNumber) VALUES (? , ?)"; + + private PreparedStatement insertGroupStmt; + + static { + try { + Class.forName(Cfg.get("RdbmsHandler.driverClassName")); + } catch (ClassNotFoundException e) { + System.err.println("Unable to register JDBC driver '" + + Cfg.get("RdbmsHandler.jdbcUrl") + "'"); + System.exit(1); + } + } + + Connection conn = null; + + public void connect() throws SQLException { + if (null != conn) { + conn.rollback(); + conn.close(); + } + conn = DriverManager.getConnection(Cfg.get("RdbmsHandler.jdbcUrl"), + Cfg.get("RdbmsHandler.user"), Cfg.get("RdbmsHandler.password")); + conn.setAutoCommit(false); + insertGroupStmt = conn.prepareStatement(insertGroupSql, Statement.RETURN_GENERATED_KEYS); + } + + public void addGroups(final Set<Group> groups) { + try { + for (final Group g : groups) { + insertGroupStmt.setString(1, g.gid); + insertGroupStmt.setInt(2, g.gidNumber); + insertGroupStmt.executeUpdate(); + addGeneratedId(insertGroupStmt, g); + } + conn.commit(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + static void addGeneratedId(final PreparedStatement stmt, final Group group) + throws SQLException { + final ResultSet rs = stmt.getGeneratedKeys(); + if (rs.next()) { + final int ret = rs.getInt(1); + log.info("Generated id=" + ret); + group.setDatabaseId(ret); + } else { + log.fatal("No id found for group '" + group.gid + "', exiting!"); + System.exit(1); + } + } +} diff --git a/Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/log4j.properties b/Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/log4j.properties new file mode 100644 index 000000000..4c03813af --- /dev/null +++ b/Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/log4j.properties @@ -0,0 +1,13 @@ +#Set root logger level to DEBUG and its only appender to A1. +log4j.rootLogger=DEBUG, A1 + +# A1 is set to be a ConsoleAppender. +log4j.appender.A1=org.apache.log4j.ConsoleAppender + +# A1 uses PatternLayout. +log4j.appender.A1.layout=org.apache.log4j.PatternLayout +log4j.appender.A1.layout.ConversionPattern=%p: %m at %c.%M(%C{1}.java:%L)%n + + +# Specific log level per-class/package rules +#log4j.logger.de.hdm_stuttgart.mi.sda2.usermanage.parse.Group=INFO diff --git a/Sda2/P/UnixSqlLdap/Jndi/usermanage/src/test/java/de/hdm_stuttgart/mi/sda2/usermanage/UserTest.java b/Sda2/P/UnixSqlLdap/Jndi/usermanage/src/test/java/de/hdm_stuttgart/mi/sda2/usermanage/UserTest.java new file mode 100644 index 000000000..2aa735b37 --- /dev/null +++ b/Sda2/P/UnixSqlLdap/Jndi/usermanage/src/test/java/de/hdm_stuttgart/mi/sda2/usermanage/UserTest.java @@ -0,0 +1,14 @@ +package de.hdm_stuttgart.mi.sda2.usermanage; + +import org.junit.Assert; +import org.junit.Test; + +/** + * Unit test for simple App. + */ +public class UserTest { + @Test + public void testApp() { + Assert.assertTrue( true ); + } +} -- GitLab