diff --git a/src/babashka/pods/impl/resolver.clj b/src/babashka/pods/impl/resolver.clj index 342344c..4cc91c7 100644 --- a/src/babashka/pods/impl/resolver.clj +++ b/src/babashka/pods/impl/resolver.clj @@ -18,20 +18,26 @@ (def os {:os/name (System/getProperty "os.name") :os/arch (let [arch (System/getProperty "os.arch")] (normalize-arch arch))}) - (defn warn [& strs] (binding [*out* *err*] (apply println strs))) (defn match-artifacts [package] - (let [artifacts (:pod/artifacts package)] - (filter (fn [{os-name :os/name - os-arch :os/arch}] - (let [os-arch (normalize-arch os-arch)] - (and (re-matches (re-pattern os-name) (:os/name os)) - (re-matches (re-pattern os-arch) - (:os/arch os))))) - artifacts))) + (let [artifacts (:pod/artifacts package) + res (filter (fn [{os-name :os/name + os-arch :os/arch}] + (let [os-arch (normalize-arch os-arch)] + (and (re-matches (re-pattern os-name) (:os/name os)) + (re-matches (re-pattern os-arch) + (:os/arch os))))) + artifacts)] + (when (empty? res) + (throw (IllegalArgumentException. (format "No executable found for pod %s (%s) and OS %s/%s" + (:pod/name package) + (:pod/version package) + (:os/name os) + (:os/arch os))))) + res)) (defn unzip [{:keys [^java.io.File zip-file ^java.io.File destination-dir @@ -149,7 +155,8 @@ (String. "UTF-8")))) (defn resolve [qsym version force?] - (assert (string? version) "Version must be provided!") + (when-not (string? version) + (throw (IllegalArgumentException. "Version must be provided for resolving from pod registry!"))) (when-let [manifest (pod-manifest qsym version force?)] (let [artifacts (match-artifacts manifest) cdir (cache-dir manifest) diff --git a/test-resources/pod_registry.clj b/test-resources/pod_registry.clj new file mode 100644 index 0000000..9199173 --- /dev/null +++ b/test-resources/pod_registry.clj @@ -0,0 +1,11 @@ +(require '[babashka.pods :as pods]) + +(pods/load-pod 'org.babashka/buddy "0.0.1") + +(require '[pod.babashka.buddy.codecs :as codecs] + '[pod.babashka.buddy.hash :as hash]) + +(println (-> (hash/sha256 "foobar") + (codecs/bytes->hex))) + +(pods/load-pod 'org.babashka/etaoin) ;; should cause error when version is missing diff --git a/test/babashka/pods/jvm_test.clj b/test/babashka/pods/jvm_test.clj index 30df013..48f3dfd 100644 --- a/test/babashka/pods/jvm_test.clj +++ b/test/babashka/pods/jvm_test.clj @@ -1,6 +1,8 @@ (ns babashka.pods.jvm-test - (:require [babashka.pods.test-common :refer [test-program assertions]] - [clojure.test :refer [deftest]])) + (:require [babashka.pods.test-common :refer [test-program assertions + pod-registry]] + [clojure.string :as str] + [clojure.test :refer [deftest is]])) (deftest jvm-test (let [out (java.io.StringWriter.) @@ -12,3 +14,15 @@ (catch Exception e (prn e))))] (assertions out err ret))) + +(deftest pod-registry-test + (let [out (java.io.StringWriter.) + err (java.io.StringWriter.) + ex (binding [*out* out + *err* err] + (try (load-string + pod-registry) + (catch Exception e + e)))] + (is (str/includes? (str out) "c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2")) + (is (str/includes? (pr-str ex) "Version must be provided" )))) diff --git a/test/babashka/pods/sci_test.clj b/test/babashka/pods/sci_test.clj index 431284d..883adbe 100644 --- a/test/babashka/pods/sci_test.clj +++ b/test/babashka/pods/sci_test.clj @@ -1,7 +1,8 @@ (ns babashka.pods.sci-test (:require [babashka.pods.sci :as pods] - [babashka.pods.test-common :refer [test-program assertions]] - [clojure.test :refer [deftest]] + [babashka.pods.test-common :refer [test-program assertions pod-registry]] + [clojure.string :as str] + [clojure.test :refer [deftest is]] [sci.core :as sci])) (deftest sci-test @@ -19,3 +20,15 @@ sci/err err] (sci/eval-string* ctx test-program))] (assertions out err ret))) + +(deftest pod-registry-test + (let [out (java.io.StringWriter.) + err (java.io.StringWriter.) + ex (binding [*out* out + *err* err] + (try (load-string + pod-registry) + (catch Exception e + e)))] + (is (str/includes? (str out) "c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2")) + (is (str/includes? (pr-str ex) "Version must be provided" )))) diff --git a/test/babashka/pods/test_common.clj b/test/babashka/pods/test_common.clj index 6012d6d..3ee5ddd 100644 --- a/test/babashka/pods/test_common.clj +++ b/test/babashka/pods/test_common.clj @@ -30,3 +30,5 @@ (is (= expected actual)))) (is (= "(\"hello\" \"print\" \"this\" \"debugging\" \"message\")\n:foo\n:foo\n" (str out))) (is (= "(\"hello\" \"print\" \"this\" \"error\")\n" (str err)))) + +(def pod-registry (slurp (io/file "test-resources" "pod_registry.clj")))