Skip to content
This repository has been archived by the owner on Mar 22, 2023. It is now read-only.

Commit

Permalink
deflakes integration tests (#538)
Browse files Browse the repository at this point in the history
  • Loading branch information
shamsimam authored and pschorf committed Dec 19, 2018
1 parent ede6a00 commit 9ffd9be
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 49 deletions.
63 changes: 29 additions & 34 deletions waiter/integration/waiter/basic_test.clj
Expand Up @@ -187,35 +187,31 @@

(deftest ^:parallel ^:integration-fast test-basic-logs
(testing-using-waiter-url
(if (contains? #{"cook" "kubernetes" "marathon"} (scheduler-kind waiter-url))
(let [waiter-headers {:x-waiter-name (rand-name)}
{:keys [cookies router-id service-id]} (make-request-with-debug-info waiter-headers #(make-kitchen-request waiter-url %))
router-url (get (routers waiter-url) router-id)]
(let [active-instances (get-in (service-settings router-url service-id :cookies cookies)
[:instances :active-instances])
log-url (:log-url (first active-instances))
_ (log/debug "Log Url:" log-url)
make-request-fn (fn [url] (make-request url "" :verbose true))
{:keys [body] :as logs-response} (make-request-fn log-url)
_ (assert-response-status logs-response 200)
_ (log/debug "Response body:" body)
log-files-list (walk/keywordize-keys (json/read-str body))
stdout-file-link (:url (first (filter #(= (:name %) "stdout") log-files-list)))
stderr-file-link (:url (first (filter #(= (:name %) "stderr") log-files-list)))]
(is (every? #(str/includes? body %) ["stderr" "stdout"])
(str "Directory listing is missing entries: stderr and stdout, got response: " logs-response))
(when (using-marathon? waiter-url)
(is (str/includes? body service-id)
(str "Directory listing is missing entries: " service-id
": got response: " logs-response)))
(let [stdout-response (make-request-fn stdout-file-link)]
(is (= 200 (:status stdout-response))
(str "Expected 200 while getting stdout, got response: " stdout-response)))
(let [stderr-response (make-request-fn stderr-file-link)]
(is (= 200 (:status stderr-response))
(str "Expected 200 while getting stderr, got response: " stderr-response))))
(delete-service waiter-url service-id))
(log/warn "test-basic-logs cannot run because the target Waiter is not using Marathon"))))
(let [waiter-headers {:x-waiter-name (rand-name)}
{:keys [cookies service-id]} (make-request-with-debug-info waiter-headers #(make-kitchen-request waiter-url %))]
(assert-service-on-all-routers waiter-url service-id cookies)
(let [active-instances (get-in (service-settings waiter-url service-id :cookies cookies)
[:instances :active-instances])
log-url (:log-url (first active-instances))
_ (log/debug "Log Url:" log-url)
make-request-fn (fn [url] (make-request url "" :verbose true))
{:keys [body] :as logs-response} (make-request-fn log-url)
_ (assert-response-status logs-response 200)
_ (log/debug "Response body:" body)
log-files-list (walk/keywordize-keys (json/read-str body))
stdout-file-link (:url (first (filter #(= (:name %) "stdout") log-files-list)))
stderr-file-link (:url (first (filter #(= (:name %) "stderr") log-files-list)))]
(is (every? #(str/includes? body %) ["stderr" "stdout"])
(str "Directory listing is missing entries: stderr and stdout, got response: " logs-response))
(when (using-marathon? waiter-url)
(is (str/includes? body service-id)
(str "Directory listing is missing entries: " service-id
": got response: " logs-response)))
(doseq [file-link [stderr-file-link stdout-file-link]]
(if (str/starts-with? (str file-link) "http")
(assert-response-status (make-request-fn file-link) 200)
(log/warn "test-basic-logs did not verify file link:" stdout-file-link))))
(delete-service waiter-url service-id))))

(deftest ^:parallel ^:integration-fast test-basic-backoff-config
(let [path "/req"]
Expand Down Expand Up @@ -621,15 +617,14 @@
(let [num-ports 8
waiter-headers {:x-waiter-name (rand-name)
:x-waiter-ports num-ports}
{:keys [body router-id service-id]}
(make-request-with-debug-info waiter-headers #(make-kitchen-request waiter-url % :path "/environment"))
{:keys [body service-id]} (make-request-with-debug-info
waiter-headers #(make-kitchen-request waiter-url % :path "/environment"))
body-json (json/read-str (str body))]
(is (every? #(contains? body-json (str "PORT" %)) (range num-ports))
(str body-json))
(let [{:keys [cookies]} (make-request waiter-url "/waiter-auth")
router-url (get (routers waiter-url) router-id)
{:keys [extra-ports port] :as active-instance} (-> (service-settings router-url service-id :cookies cookies)
(get-in [:instances :active-instances 0]))]
_ (assert-service-on-all-routers waiter-url service-id cookies)
{:keys [extra-ports port] :as active-instance} (first (active-instances waiter-url service-id))]
(log/info service-id "active-instance:" active-instance)
(is (seq active-instance) (str active-instance))
(is (pos? port) (str active-instance))
Expand Down
7 changes: 5 additions & 2 deletions waiter/integration/waiter/token_request_test.clj
Expand Up @@ -772,11 +772,13 @@
(deftest ^:parallel ^:integration-fast ^:explicit test-on-the-fly-to-token
(testing-using-waiter-url
(let [name-string (rand-name)
canary-response (make-kitchen-request waiter-url {:x-waiter-name name-string})
service-id-1 (retrieve-service-id waiter-url (:request-headers canary-response))]
{:keys[cookies] :as canary-response}
(make-request-with-debug-info {:x-waiter-name name-string} #(make-kitchen-request waiter-url %))
service-id-1 (:service-id canary-response)]
(with-service-cleanup
service-id-1
(is (str/includes? service-id-1 name-string) (str "ERROR: App-name is missing " name-string))
(assert-service-on-all-routers waiter-url service-id-1 cookies)
(is (nil? (service-id->source-tokens-entries waiter-url service-id-1)))
(let [token (str "^SERVICE-ID#" service-id-1)
response (make-request-with-debug-info {:x-waiter-token token} #(make-request waiter-url "" :headers %))
Expand All @@ -786,6 +788,7 @@
(assert-response-status response 200)
(is service-id-2)
(is (= service-id-1 service-id-2) "The on-the-fly and token-based service ids do not match")
(assert-service-on-all-routers waiter-url service-id-1 cookies)
(is (= #{(make-source-tokens-entries waiter-url token)}
(service-id->source-tokens-entries waiter-url service-id-2)))))))))

Expand Down
4 changes: 3 additions & 1 deletion waiter/src/waiter/scheduler/shell.clj
Expand Up @@ -548,7 +548,9 @@
item found in the instance's working directory + relative-dir"
[{:keys [id->instance]} instance-id relative-dir]
(let [{:keys [:shell-scheduler/working-directory]} (get id->instance instance-id)
directory (io/file working-directory relative-dir)
directory (if (str/blank? relative-dir)
(io/file working-directory)
(io/file working-directory relative-dir))
directory-content (vec (.listFiles directory))]
(map (fn [^File file]
(cond-> {:name (.getName file)
Expand Down
32 changes: 20 additions & 12 deletions waiter/src/waiter/util/client_tools.clj
Expand Up @@ -494,18 +494,6 @@
(log/debug service-id "has" tasks-running' "task(s) running."))
(int tasks-running')))

(defn active-instances
"Returns the active instances for the given service-id"
[waiter-url service-id]
(get-in (service-settings waiter-url service-id) [:instances :active-instances]))

(defn num-instances
"Returns the number of active instances for the given service-id"
[waiter-url service-id]
(let [instances (count (active-instances waiter-url service-id))]
(log/debug service-id "has" instances "instances.")
instances))

(defn scale-service-to [waiter-url service-id target-instances]
(let [marathon-url (marathon-url waiter-url)]
(log/info service-id "being scaled to" target-instances "task(s).")
Expand Down Expand Up @@ -931,3 +919,23 @@
walk/keywordize-keys
(map :service-id)
set))

(defn active-instances
"Returns the active instances for the given service-id"
[waiter-url service-id & {:keys [cookies] :or {cookies {}}}]
(get-in (service-settings waiter-url service-id :cookies cookies)
[:instances :active-instances]))

(defn num-instances
"Returns the number of active instances for the given service-id"
[waiter-url service-id & {:keys [cookies] :or {cookies {}}}]
(let [instances (count (active-instances waiter-url service-id :cookies cookies))]
(log/debug service-id "has" instances "instances.")
instances))

(defmacro assert-service-on-all-routers
[waiter-url service-id cookies]
`(let [service-id# ~service-id
cookies# ~cookies]
(doseq [[_# router-url#] (routers ~waiter-url)]
(is (wait-for #(seq (active-instances router-url# service-id# :cookies cookies#)))))))

0 comments on commit 9ffd9be

Please sign in to comment.