First version of run-script-on-nodes-matching. Added some missing code to ssh_test to stub out ssh in test.

This commit is contained in:
Mattias Holmqvist 2011-05-12 23:10:45 +02:00
parent 73deebebbf
commit e71c88a1a4
3 changed files with 40 additions and 3 deletions

View File

@ -233,6 +233,10 @@ Here's an example of creating and running a small linux node in the group webser
([#^ComputeService compute id]
(.destroyNode compute id)))
(defn run-script-on-nodes-matching [#^ComputeService compute pred command template]
"Run a script on the nodes matching the given predicate"
(.runScriptOnNodesMatching compute (to-predicate pred) command template))
(defmacro state-predicate [node state]
`(= (.getState ~node)
(. org.jclouds.compute.domain.NodeState ~state)))

View File

@ -20,10 +20,17 @@
(ns org.jclouds.compute2-test
(:use [org.jclouds.compute2] :reload-all)
(:use clojure.test)
(:require [org.jclouds.ssh-test :as ssh-test])
(:import
org.jclouds.compute.domain.OsFamily
clojure.contrib.condition.Condition
java.net.InetAddress))
java.net.InetAddress
org.jclouds.scriptbuilder.domain.Statements
org.jclouds.compute.options.TemplateOptions
org.jclouds.compute.options.TemplateOptions$Builder
org.jclouds.domain.Credentials
java.util.NoSuchElementException
))
(defmacro with-private-vars [[ns fns] & tests]
"Refers private fns from ns and runs tests in context. From users mailing
@ -34,7 +41,7 @@ list, Alan Dipert and MeikelBrandmeyer."
(deftest os-families-test
(is (some #{"centos"} (map str (os-families)))))
(def *compute* (compute-service "stub" "" ""))
(def *compute* (compute-service "stub" "" "" :extensions [(ssh-test/ssh-test-client ssh-test/no-op-ssh-client)]))
(defn clean-stub-fixture
"This should allow basic tests to easily be run with another service."
@ -85,6 +92,17 @@ list, Alan Dipert and MeikelBrandmeyer."
(is (= 0 (count (nodes-with-details-matching *compute* #(and (running? %) (localhost? %))))))
(is (= 1 (count (nodes-with-details-matching *compute* #(and (running? %) (not (localhost? %))))))))
(deftest run-script-on-nodes-matching-test
(let [echo (Statements/exec "echo hello")
script-options (.. (TemplateOptions$Builder/overrideCredentialsWith (Credentials. "user" "password"))
(runAsRoot false)
(wrapInInitScript false))
pred #(= (.getGroup %) "scriptednode")]
(is (create-node *compute* "scriptednode" (build-template *compute* {})))
(is (run-script-on-nodes-matching *compute* pred echo script-options))
(is (thrown? NoSuchElementException
(run-script-on-nodes-matching *compute* #(= (.getGroup %) "nonexistingnode") echo script-options)))))
(deftest build-template-test
(let [service (compute-service "stub" "user" "password")]
(testing "nullary"

View File

@ -17,6 +17,16 @@
; ====================================================================
;
(ns org.jclouds.ssh-test
(:require
[clojure.contrib.logging :as logging])
(:import
org.jclouds.ssh.SshClient
org.jclouds.domain.Credentials
org.jclouds.io.Payload
org.jclouds.net.IPSocket
org.jclouds.compute.domain.ExecResponse))
(defn instantiate [impl-class & args]
(let [constructor (first
(filter
@ -73,7 +83,12 @@
(^org.jclouds.ssh.SshClient
create
[_ ^IPSocket socket ^String username ^bytes password-or-key]
(factory-fn socket username password-or-key)))
(factory-fn socket username password-or-key))
(^org.jclouds.ssh.SshClient
create
[_ ^IPSocket socket ^Credentials credentials]
(factory-fn socket (.identity credentials) (.credential credentials)))
)
(deftype Module
[factory binder]