From 6dbebf15bdb0c93407e467f5c85000495eba7bb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20Z=C3=B6ller?= Date: Sat, 6 Jun 2020 14:43:11 +0200 Subject: [PATCH] #6 - Enabled command execution in the container Also used it to enhance integration tests and make them more precise --- src/clj_test_containers/core.clj | 9 +++++++++ test/clj_test_containers/core_test.clj | 26 +++++++++++++++++++++++--- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/src/clj_test_containers/core.clj b/src/clj_test_containers/core.clj index 891dbaa..b88c399 100644 --- a/src/clj_test_containers/core.clj +++ b/src/clj_test_containers/core.clj @@ -67,6 +67,15 @@ mountable-file container-path)))) +(defn execute-command + [container-conf command] + (let [container (:container container-conf) + result (.execInContainer container + (into-array command))] + {:exit-code (.getExitCode result) + :stdout (.getStdout result) + :stderr (.getStderr result)})) + (defn start "Starts the underlying testcontainer instance and adds new values to the response map, e.g. :id and :first-mapped-port" [container-conf] diff --git a/test/clj_test_containers/core_test.clj b/test/clj_test_containers/core_test.clj index 977437f..d526737 100644 --- a/test/clj_test_containers/core_test.clj +++ b/test/clj_test_containers/core_test.clj @@ -15,6 +15,18 @@ (is (nil? (:id stopped-container))) (is (nil? (:mapped-ports stopped-container)))))) +(deftest execute-command-in-container + + (testing "Executing a command in the running Docker container" + (let [container (create {:image-name "postgres:12.2" + :exposed-ports [5432] + :env-vars {"POSTGRES_PASSWORD" "pw"}}) + initialized-container (start container) + result (execute-command initialized-container ["whoami"]) + stopped-container (stop container)] + (is (= 0 (:exit-code result))) + (is (= "root\n" (:stdout result)))))) + (deftest init-with-volume-test (testing "Testing mapping of a classpath resource" @@ -25,10 +37,12 @@ :container-path "/opt/test.sql" :mode :read-only}})) initialized-container (start container) + file-check (execute-command initialized-container ["tail" "/opt/test.sql"]) stopped-container (stop container)] (is (some? (:id initialized-container))) (is (some? (:mapped-ports initialized-container))) (is (some? (get (:mapped-ports initialized-container) 5432))) + (is (= 0 (:exit-code file-check))) (is (nil? (:id stopped-container))) (is (nil? (:mapped-ports stopped-container))))) @@ -36,14 +50,16 @@ (let [container (-> (create {:image-name "postgres:12.2" :exposed-ports [5432] :env-vars {"POSTGRES_PASSWORD" "pw"}}) - (configure-volume {:file-system-bind {:host-path "/tmp" + (configure-volume {:file-system-bind {:host-path "." :container-path "/opt" :mode :read-only}})) initialized-container (start container) + file-check (execute-command initialized-container ["tail" "/opt/README.md"]) stopped-container (stop container)] (is (some? (:id initialized-container))) (is (some? (:mapped-ports initialized-container))) (is (some? (get (:mapped-ports initialized-container) 5432))) + (is (= 0 (:exit-code file-check))) (is (nil? (:id stopped-container))) (is (nil? (:mapped-ports stopped-container))))) @@ -52,13 +68,15 @@ :exposed-ports [5432] :env-vars {"POSTGRES_PASSWORD" "pw"}}) (copy-file-to-container {:path "test.sql" - :container-path "/opt" + :container-path "/opt/test.sql" :type :host-path})) initialized-container (start container) + file-check (execute-command initialized-container ["tail" "/opt/test.sql"]) stopped-container (stop container)] (is (some? (:id initialized-container))) (is (some? (:mapped-ports initialized-container))) (is (some? (get (:mapped-ports initialized-container) 5432))) + (is (= 0 (:exit-code file-check))) (is (nil? (:id stopped-container))) (is (nil? (:mapped-ports stopped-container))))) @@ -67,12 +85,14 @@ :exposed-ports [5432] :env-vars {"POSTGRES_PASSWORD" "pw"}}) (copy-file-to-container {:path "test.sql" - :container-path "/opt" + :container-path "/opt/test.sql" :type :classpath-resource})) initialized-container (start container) + file-check (execute-command initialized-container ["tail" "/opt/test.sql"]) stopped-container (stop container)] (is (some? (:id initialized-container))) (is (some? (:mapped-ports initialized-container))) (is (some? (get (:mapped-ports initialized-container) 5432))) + (is (= 0 (:exit-code file-check))) (is (nil? (:id stopped-container))) (is (nil? (:mapped-ports stopped-container))))))