From 1bf14d8f7bd3e51c16ee6f5fbff9501f93b4aca7 Mon Sep 17 00:00:00 2001
From: Alexandre Vanini <vanini.alexandre@gmail.com>
Date: Wed, 1 May 2019 18:55:30 +0200
Subject: [PATCH] [TESTS] - Docker support added

---
 .gitignore                                    |   2 +
 README.md                                     |   4 +-
 .../python/assert_test01/.idea/workspace.xml  |   4 +-
 .../app/compilateur/compilateur.component.css |   9 +--
 .../server_rest/.idea/compiler.xml            |   2 +-
 .../server_rest/.idea/workspace.xml           |  26 +++------
 .../serveur_compilation/.idea/workspace.xml   |  53 ++++++++++--------
 .../serveur_compilation/docker/dockerfile     |  12 ++++
 .../__pycache__/sample.cpython-34.pyc         | Bin 0 -> 349 bytes
 .../share_docker_file/test.txt                |   1 +
 .../src/main/java/compilation.java            |   9 +--
 .../target/classes/compilation.class          | Bin 4737 -> 4951 bytes
 12 files changed, 70 insertions(+), 52 deletions(-)
 create mode 100644 tests/serveur_compilation/serveur_compilation/docker/dockerfile
 create mode 100644 tests/serveur_compilation/serveur_compilation/share_docker_file/__pycache__/sample.cpython-34.pyc
 create mode 100644 tests/serveur_compilation/serveur_compilation/share_docker_file/test.txt

diff --git a/.gitignore b/.gitignore
index 0485ba8..f95f670 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,4 @@
 
 \.DS_Store
+
+doc/
diff --git a/README.md b/README.md
index fbdeaad..64419fe 100644
--- a/README.md
+++ b/README.md
@@ -14,8 +14,10 @@
 ## C'est quoi ?
 Dojo Hepia est un site propre d'HEPIA, qui à pour but de proposer une plateforme simple de publication d'entrainement constitués de kata. Le but est d'encourager les professeurs à centraliser leurs exercices (de code) sur une seule et même plateforme.
 
+Dojo Hepia permet de créer des programmes constitués de kata.
+
 ## Pourquoi ?
-Parler de la valeur péga ajoutée et de la plateforme de code et de compilation online
+Parler de la valeur pédago ajoutée et de la plateforme de code et de compilation online
 
 
 
diff --git a/tests/python/assert_test01/.idea/workspace.xml b/tests/python/assert_test01/.idea/workspace.xml
index 340adcf..3415de7 100644
--- a/tests/python/assert_test01/.idea/workspace.xml
+++ b/tests/python/assert_test01/.idea/workspace.xml
@@ -145,12 +145,12 @@
       <option name="presentableId" value="Default" />
       <updated>1556636994757</updated>
       <workItem from="1556636997623" duration="502000" />
-      <workItem from="1556696058143" duration="2446000" />
+      <workItem from="1556696058143" duration="2450000" />
     </task>
     <servers />
   </component>
   <component name="TimeTrackingManager">
-    <option name="totallyTimeSpent" value="2948000" />
+    <option name="totallyTimeSpent" value="2952000" />
   </component>
   <component name="ToolWindowManager">
     <frame x="355" y="87" width="1400" height="1000" extended-state="0" />
diff --git a/tests/serveur_compilation/front-end-compilation/src/app/compilateur/compilateur.component.css b/tests/serveur_compilation/front-end-compilation/src/app/compilateur/compilateur.component.css
index 2a6ac6c..9ea716f 100644
--- a/tests/serveur_compilation/front-end-compilation/src/app/compilateur/compilateur.component.css
+++ b/tests/serveur_compilation/front-end-compilation/src/app/compilateur/compilateur.component.css
@@ -1,11 +1,12 @@
 textarea {
   background-color: rgba(43, 47, 57, 1);
-  border: 0;
+  border: 2px solid rgba(44, 62, 80, 1.0);
   color: white;
   margin: 20px;
   border-radius: 12px;
   padding: 10px;
   resize: none;
+  outline: none;
 }
 
 button {
@@ -28,14 +29,14 @@ button:hover {
 }
 
 .success {
-  border: 3px rgba(39, 174, 96,1.0) solid;
-  background-color: rgba(39, 174, 96,0.2);
+  border: 3px rgba(39, 174, 96, 1.0) solid;
+  background-color: rgba(39, 174, 96, 0.2);
 }
 
 select {
   padding-left: 10px;
   background-color: rgba(43, 47, 57, 1);
-  border: 0;
+  border: 2px solid white;
   color: white;
   margin: 20px;
   border-radius: 12px;
diff --git a/tests/serveur_compilation/server_rest/.idea/compiler.xml b/tests/serveur_compilation/server_rest/.idea/compiler.xml
index 14146fd..f8ea6ba 100644
--- a/tests/serveur_compilation/server_rest/.idea/compiler.xml
+++ b/tests/serveur_compilation/server_rest/.idea/compiler.xml
@@ -6,8 +6,8 @@
         <sourceOutputDir name="target/generated-sources/annotations" />
         <sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
         <outputRelativeToContentRoot value="true" />
-        <module name="server_rest_new" />
         <module name="09" />
+        <module name="server_rest_new" />
       </profile>
     </annotationProcessing>
   </component>
diff --git a/tests/serveur_compilation/server_rest/.idea/workspace.xml b/tests/serveur_compilation/server_rest/.idea/workspace.xml
index cdcbdca..2f0fea1 100644
--- a/tests/serveur_compilation/server_rest/.idea/workspace.xml
+++ b/tests/serveur_compilation/server_rest/.idea/workspace.xml
@@ -2,20 +2,9 @@
 <project version="4">
   <component name="ChangeListManager">
     <list default="true" id="e6a1f2e5-4f60-4227-82bb-83eb10fa94a5" name="Default Changelist" comment="">
-      <change afterPath="$PROJECT_DIR$/../../python/assert_test01/.idea/assert_test01.iml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/../../python/assert_test01/.idea/misc.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/../../python/assert_test01/.idea/modules.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/../../python/assert_test01/.idea/vcs.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/../../python/assert_test01/main.py" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/../../python/assert_test01/test.py" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../front-end-compilation/src/app/app.component.html" beforeDir="false" afterPath="$PROJECT_DIR$/../front-end-compilation/src/app/app.component.html" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../front-end-compilation/src/app/compilateur/compilateur.component.html" beforeDir="false" afterPath="$PROJECT_DIR$/../front-end-compilation/src/app/compilateur/compilateur.component.html" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../front-end-compilation/src/app/compilateur/compilateur.component.ts" beforeDir="false" afterPath="$PROJECT_DIR$/../front-end-compilation/src/app/compilateur/compilateur.component.ts" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../front-end-compilation/src/app/compilation.service.ts" beforeDir="false" afterPath="$PROJECT_DIR$/../front-end-compilation/src/app/compilation.service.ts" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../../../README.md" beforeDir="false" afterPath="$PROJECT_DIR$/../../../README.md" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../front-end-compilation/src/app/compilateur/compilateur.component.css" beforeDir="false" afterPath="$PROJECT_DIR$/../front-end-compilation/src/app/compilateur/compilateur.component.css" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/.idea/compiler.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/compiler.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/java/app.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/app.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../serveur_compilation/.idea/compiler.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../serveur_compilation/.idea/compiler.xml" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/../serveur_compilation/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../serveur_compilation/.idea/workspace.xml" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/../serveur_compilation/src/main/java/compilation.java" beforeDir="false" afterPath="$PROJECT_DIR$/../serveur_compilation/src/main/java/compilation.java" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/../serveur_compilation/target/classes/compilation.class" beforeDir="false" afterPath="$PROJECT_DIR$/../serveur_compilation/target/classes/compilation.class" afterDir="false" />
@@ -46,7 +35,7 @@
         <entry file="file://$PROJECT_DIR$/src/main/java/app.java">
           <provider selected="true" editor-type-id="text-editor">
             <state relative-caret-position="45">
-              <caret line="8" column="18" lean-forward="true" selection-start-line="8" selection-start-column="18" selection-end-line="8" selection-end-column="18" />
+              <caret line="8" column="18" selection-start-line="8" selection-start-column="18" selection-end-line="8" selection-end-column="18" />
             </state>
           </provider>
         </entry>
@@ -91,9 +80,9 @@
       <foldersAlwaysOnTop value="true" />
     </navigator>
     <panes>
-      <pane id="PackagesPane" />
       <pane id="ProjectPane" />
       <pane id="Scope" />
+      <pane id="PackagesPane" />
     </panes>
   </component>
   <component name="PropertiesComponent">
@@ -160,16 +149,17 @@
       <workItem from="1556636100835" duration="126000" />
       <workItem from="1556699423305" duration="678000" />
       <workItem from="1556700805455" duration="927000" />
+      <workItem from="1556726276244" duration="564000" />
     </task>
     <servers />
   </component>
   <component name="TimeTrackingManager">
-    <option name="totallyTimeSpent" value="1731000" />
+    <option name="totallyTimeSpent" value="2295000" />
   </component>
   <component name="ToolWindowManager">
     <frame x="0" y="23" width="1920" height="1121" extended-state="0" />
     <layout>
-      <window_info content_ui="combo" id="Project" order="0" visible="true" weight="0.2550586" />
+      <window_info content_ui="combo" id="Project" order="0" visible="true" weight="0.25772098" />
       <window_info id="Structure" order="1" side_tool="true" weight="0.25" />
       <window_info id="Image Layers" order="2" />
       <window_info id="Designer" order="3" />
@@ -214,7 +204,7 @@
     <entry file="file://$PROJECT_DIR$/src/main/java/app.java">
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="45">
-          <caret line="8" column="18" lean-forward="true" selection-start-line="8" selection-start-column="18" selection-end-line="8" selection-end-column="18" />
+          <caret line="8" column="18" selection-start-line="8" selection-start-column="18" selection-end-line="8" selection-end-column="18" />
         </state>
       </provider>
     </entry>
diff --git a/tests/serveur_compilation/serveur_compilation/.idea/workspace.xml b/tests/serveur_compilation/serveur_compilation/.idea/workspace.xml
index 743efce..c44ebe8 100644
--- a/tests/serveur_compilation/serveur_compilation/.idea/workspace.xml
+++ b/tests/serveur_compilation/serveur_compilation/.idea/workspace.xml
@@ -2,21 +2,10 @@
 <project version="4">
   <component name="ChangeListManager">
     <list default="true" id="8d8fb2c1-8426-4933-8193-ee68625cf8de" name="Default Changelist" comment="">
-      <change afterPath="$PROJECT_DIR$/../../python/assert_test01/.idea/assert_test01.iml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/../../python/assert_test01/.idea/misc.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/../../python/assert_test01/.idea/modules.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/../../python/assert_test01/.idea/vcs.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/../../python/assert_test01/main.py" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/../../python/assert_test01/test.py" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../front-end-compilation/src/app/app.component.html" beforeDir="false" afterPath="$PROJECT_DIR$/../front-end-compilation/src/app/app.component.html" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../front-end-compilation/src/app/compilateur/compilateur.component.html" beforeDir="false" afterPath="$PROJECT_DIR$/../front-end-compilation/src/app/compilateur/compilateur.component.html" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../front-end-compilation/src/app/compilateur/compilateur.component.ts" beforeDir="false" afterPath="$PROJECT_DIR$/../front-end-compilation/src/app/compilateur/compilateur.component.ts" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../front-end-compilation/src/app/compilation.service.ts" beforeDir="false" afterPath="$PROJECT_DIR$/../front-end-compilation/src/app/compilation.service.ts" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../../../README.md" beforeDir="false" afterPath="$PROJECT_DIR$/../../../README.md" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../front-end-compilation/src/app/compilateur/compilateur.component.css" beforeDir="false" afterPath="$PROJECT_DIR$/../front-end-compilation/src/app/compilateur/compilateur.component.css" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/../server_rest/.idea/compiler.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../server_rest/.idea/compiler.xml" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/../server_rest/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../server_rest/.idea/workspace.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../server_rest/src/main/java/app.java" beforeDir="false" afterPath="$PROJECT_DIR$/../server_rest/src/main/java/app.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/compiler.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/compiler.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/src/main/java/compilation.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/compilation.java" afterDir="false" />
     </list>
     <ignored path="$PROJECT_DIR$/out/" />
@@ -35,7 +24,7 @@
       <file pinned="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/pom.xml">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="591">
+            <state relative-caret-position="705">
               <caret line="47" column="19" selection-start-line="47" selection-start-column="19" selection-end-line="47" selection-end-column="19" />
             </state>
           </provider>
@@ -44,8 +33,8 @@
       <file pinned="false" current-in-tab="true">
         <entry file="file://$PROJECT_DIR$/src/main/java/compilation.java">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="135">
-              <caret line="9" column="82" lean-forward="true" selection-start-line="9" selection-start-column="82" selection-end-line="9" selection-end-column="82" />
+            <state relative-caret-position="300">
+              <caret line="20" column="1" lean-forward="true" selection-start-line="20" selection-start-column="1" selection-end-line="20" selection-end-column="1" />
               <folding>
                 <element signature="imports" expanded="true" />
               </folding>
@@ -94,6 +83,7 @@
     </navigator>
     <panes>
       <pane id="Scope" />
+      <pane id="PackagesPane" />
       <pane id="ProjectPane">
         <subPane>
           <expand>
@@ -101,11 +91,28 @@
               <item name="serveur_compilation" type="b2602c69:ProjectViewProjectNode" />
               <item name="serveur_compilation" type="462c0819:PsiDirectoryNode" />
             </path>
+            <path>
+              <item name="serveur_compilation" type="b2602c69:ProjectViewProjectNode" />
+              <item name="serveur_compilation" type="462c0819:PsiDirectoryNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="serveur_compilation" type="b2602c69:ProjectViewProjectNode" />
+              <item name="serveur_compilation" type="462c0819:PsiDirectoryNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+              <item name="main" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="serveur_compilation" type="b2602c69:ProjectViewProjectNode" />
+              <item name="serveur_compilation" type="462c0819:PsiDirectoryNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+              <item name="main" type="462c0819:PsiDirectoryNode" />
+              <item name="java" type="462c0819:PsiDirectoryNode" />
+            </path>
           </expand>
           <select />
         </subPane>
       </pane>
-      <pane id="PackagesPane" />
     </panes>
   </component>
   <component name="PropertiesComponent">
@@ -121,6 +128,7 @@
     <property name="project.structure.last.edited" value="Modules" />
     <property name="project.structure.proportion" value="0.15" />
     <property name="project.structure.side.proportion" value="0.2" />
+    <property name="restartRequiresConfirmation" value="false" />
   </component>
   <component name="RecentsManager">
     <key name="CopyFile.RECENT_KEYS">
@@ -173,17 +181,18 @@
       <updated>1556635807220</updated>
       <workItem from="1556635811007" duration="263000" />
       <workItem from="1556699075828" duration="2375000" />
+      <workItem from="1556724368190" duration="1020000" />
     </task>
     <servers />
   </component>
   <component name="TimeTrackingManager">
-    <option name="totallyTimeSpent" value="2638000" />
+    <option name="totallyTimeSpent" value="3658000" />
   </component>
   <component name="ToolWindowManager">
     <frame x="1920" y="0" width="1920" height="1200" extended-state="0" />
     <editor active="true" />
     <layout>
-      <window_info content_ui="combo" id="Project" order="0" visible="true" weight="0.25239617" />
+      <window_info content_ui="combo" id="Project" order="0" visible="true" weight="0.2550586" />
       <window_info id="Structure" order="1" side_tool="true" weight="0.25" />
       <window_info id="Image Layers" order="2" />
       <window_info id="Designer" order="3" />
@@ -220,7 +229,7 @@
   <component name="editorHistoryManager">
     <entry file="file://$PROJECT_DIR$/pom.xml">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="591">
+        <state relative-caret-position="705">
           <caret line="47" column="19" selection-start-line="47" selection-start-column="19" selection-end-line="47" selection-end-column="19" />
         </state>
       </provider>
@@ -234,8 +243,8 @@
     </entry>
     <entry file="file://$PROJECT_DIR$/src/main/java/compilation.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="135">
-          <caret line="9" column="82" lean-forward="true" selection-start-line="9" selection-start-column="82" selection-end-line="9" selection-end-column="82" />
+        <state relative-caret-position="300">
+          <caret line="20" column="1" lean-forward="true" selection-start-line="20" selection-start-column="1" selection-end-line="20" selection-end-column="1" />
           <folding>
             <element signature="imports" expanded="true" />
           </folding>
diff --git a/tests/serveur_compilation/serveur_compilation/docker/dockerfile b/tests/serveur_compilation/serveur_compilation/docker/dockerfile
new file mode 100644
index 0000000..44733c5
--- /dev/null
+++ b/tests/serveur_compilation/serveur_compilation/docker/dockerfile
@@ -0,0 +1,12 @@
+FROM ubuntu:14.04
+
+ENV DEBIAN_FRONTEND noninteractive
+
+RUN apt-get update && apt-get -y upgrade
+RUN apt-get install -y python3-pip python3-dev
+RUN pip3 install assertpy
+
+RUN mkdir /env/
+
+WORKDIR /env/
+
diff --git a/tests/serveur_compilation/serveur_compilation/share_docker_file/__pycache__/sample.cpython-34.pyc b/tests/serveur_compilation/serveur_compilation/share_docker_file/__pycache__/sample.cpython-34.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..23275a87c85fc51866ff958eec5377c75200dc6b
GIT binary patch
literal 349
zcmaFI!^?Hx@W~i01_p-53`l^9fq}t+fq|h|fPsM_g@GZ3k)efwA&P+^g^3|plR23Y
zsuo0p)H;LI3WC%!f|Rr{Fw`(GxHL0@6#KzdgH*CGFfaszR7){1Fr<Uk#R@RgGBVUK
zf-Dl5$iz^{#t^K@_!6XgC4(l@EhasKTa1}SAU>G*#iyT|SEgT_m|KvOs#j3?i_0b_
zv$!NVKexaRq^KA~a57ZMq$U<u=49rj>e=MvCnx3<+vy<`f=$w7yv3LYW<dy61_p*(
r958Jl&w<TiU@YQbU|{gmgwPPRAWI-Dh%TGl{FKt1R6DRPQ1Ac%Zpb~y

literal 0
HcmV?d00001

diff --git a/tests/serveur_compilation/serveur_compilation/share_docker_file/test.txt b/tests/serveur_compilation/serveur_compilation/share_docker_file/test.txt
new file mode 100644
index 0000000..da5f074
--- /dev/null
+++ b/tests/serveur_compilation/serveur_compilation/share_docker_file/test.txt
@@ -0,0 +1 @@
+blablabal
\ No newline at end of file
diff --git a/tests/serveur_compilation/serveur_compilation/src/main/java/compilation.java b/tests/serveur_compilation/serveur_compilation/src/main/java/compilation.java
index 2f16589..50756d8 100644
--- a/tests/serveur_compilation/serveur_compilation/src/main/java/compilation.java
+++ b/tests/serveur_compilation/serveur_compilation/src/main/java/compilation.java
@@ -7,13 +7,14 @@ public class compilation {
     public HashMap<String, Object> execute_kata(JSONObject input) {
 
 
-        String filename = "", filename_test="", cmd = "", line, output = "", error = "";
+        String filename = "", filename_test="todeleteifitstayslikethis", cmd = "", line, output = "", error = "";
 
         switch (input.get("language").toString()) {
             case "python":
-                filename = "sample.py";
-                filename_test = "assert.py";
-                cmd = "python3 " + filename_test;
+                filename = "share_docker_file/sample.py";
+                filename_test = "share_docker_file/assert.py";
+                //  cmd = "python3 " + filename_test;
+                cmd = "docker run --rm --mount type=bind,source=/Users/freak/Desktop/dojo-hepia/tests/serveur_compilation/serveur_compilation/share_docker_file,dst=/env/ hey:1.1 python3 assert.py";
                 break;
             case "java":
                 filename = "app.java";
diff --git a/tests/serveur_compilation/serveur_compilation/target/classes/compilation.class b/tests/serveur_compilation/serveur_compilation/target/classes/compilation.class
index 34eb1119e3bed9e1fc9c99959481b5e220f8e396..ec8f215b9a581c2ea23d3af24924b37dd63b9fb1 100644
GIT binary patch
literal 4951
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

delta 2698
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

-- 
GitLab