|
1 | 1 | (ns practitest-firecracker.practitest |
2 | 2 | (:require |
| 3 | + [clojure.set :refer [difference]] |
3 | 4 | [clojure.string :as string] |
4 | | - [clojure.pprint :as pprint] |
5 | 5 | [clojure.tools.logging :as log] |
6 | 6 | [practitest-firecracker.utils :refer [print-run-time test-need-update? pformat]] |
7 | 7 | [practitest-firecracker.api :as api] |
8 | 8 | [practitest-firecracker.const :refer [max-test-ids-bucket-size]] |
9 | | - [practitest-firecracker.query-dsl :refer [query? eval-query]] |
10 | | - [practitest-firecracker.query-dsl :refer [read-query]] |
| 9 | + [practitest-firecracker.query-dsl :as query-dsl] |
11 | 10 | [practitest-firecracker.eval :as eval])) |
12 | 11 |
|
13 | 12 | (defn find-sf-testset [client [project-id display-action-logs] options testset-name] |
|
47 | 46 | {k (set (map |
48 | 47 | (fn [test] (eval/sf-test-suite->pt-test-name options test)) v))}) |
49 | 48 | (into {} testsets)) |
50 | | - tests (flatten (map val (into {} testsets))) |
51 | | - all-tests (doall (into {} (for [test tests] |
| 49 | + xml-tests (flatten (map val (into {} testsets))) |
| 50 | + all-tests (doall (into {} (for [test xml-tests] |
52 | 51 | {(eval/sf-test-suite->pt-test-name options test) test})))] |
53 | | - [all-tests testset-id-to-name ts-id-test-name-num-instances])) |
| 52 | + [all-tests xml-tests testset-id-to-name ts-id-test-name-num-instances])) |
54 | 53 |
|
55 | 54 | (defn value-get [existing-cases xml-cases] |
56 | 55 | (conj (into [] existing-cases) (into [] xml-cases))) |
|
73 | 72 | {:pt-test-step-name (:name attributes) |
74 | 73 | :description (:description attributes)}) |
75 | 74 |
|
76 | | -(defn create-or-update-tests [[all-tests testset-id-to-name ts-id-test-name-num-instances] client {:keys [project-id display-action-logs display-run-time use-test-step] :as options} start-time] |
| 75 | +(defn create-or-update-tests [[all-tests org-xml-tests testset-id-to-name ts-id-test-name-num-instances] client {:keys [project-id display-action-logs display-run-time use-test-step] :as options} start-time] |
77 | 76 | (let [new-tests (into [] (eval/group-test-names (vals all-tests) options)) |
78 | 77 | results (doall |
79 | 78 | (flatten |
|
125 | 124 | (eval/update-sf-test client options test-suite test))) |
126 | 125 | tests-with-steps)) |
127 | 126 | (when display-run-time (print-run-time "Time - after update tests: %d:%d:%d" start-time))) |
128 | | - [new-all-tests testset-id-to-name ts-id-test-name-num-instances])) |
| 127 | + [new-all-tests org-xml-tests testset-id-to-name ts-id-test-name-num-instances])) |
129 | 128 |
|
130 | 129 | (defn split-n-filter-instance-params [test pt-instance-params] |
131 | 130 | (into [] |
132 | 131 | (filter not-empty |
133 | 132 | (string/split |
134 | | - (eval-query |
135 | | - (second test) |
136 | | - (read-query pt-instance-params)) |
| 133 | + (query-dsl/eval-query |
| 134 | + test |
| 135 | + (query-dsl/read-query pt-instance-params)) |
137 | 136 | #"\|")))) |
138 | 137 |
|
139 | | -(defn create-instances [[all-tests testset-id-to-name ts-id-test-name-num-instances] client {:keys [project-id display-action-logs display-run-time pt-instance-params] :as options} start-time] |
| 138 | +(defn create-instances [[all-tests org-xml-tests testset-id-to-name ts-id-test-name-num-instances] client {:keys [project-id display-action-logs display-run-time pt-instance-params] :as options} start-time] |
140 | 139 | (when display-action-logs (log/infof "pt-instance-params: %s" pt-instance-params)) |
141 | 140 | (let [all-test-ids (map (fn [test] (:id (last test))) all-tests) |
142 | 141 | testname-test (into {} (map (fn [test] {(first test) test}) all-tests)) |
| 142 | + |
| 143 | + test-id-testname (into {} (map (fn [test] {(query-dsl/parse-int (:id (last test))) (first test)}) all-tests)) |
143 | 144 | testid-params (when (not-empty pt-instance-params) |
144 | 145 | (into {} |
145 | 146 | (map |
146 | 147 | (fn [test] |
147 | | - (let [split-params (split-n-filter-instance-params test pt-instance-params)] |
| 148 | + (let [split-params (split-n-filter-instance-params (second test) pt-instance-params)] |
148 | 149 | {(Integer/parseInt (:id (last test))) |
149 | | - (when (even? (count split-params)) |
150 | | - (apply array-map |
151 | | - (split-n-filter-instance-params test pt-instance-params)))})) |
| 150 | + (zipmap (iterate inc 1) split-params)})) |
152 | 151 | all-tests))) |
| 152 | + |
153 | 153 | log (when display-action-logs (log/infof "testid-params: %s" testid-params)) |
| 154 | + |
154 | 155 | testset-ids (map (fn [testset] (first (first testset))) testset-id-to-name) |
| 156 | + |
155 | 157 | ts-ids (string/join "," testset-ids) |
| 158 | + |
156 | 159 | instances (mapcat (fn [test-ids-bucket] |
157 | 160 | (api/ll-testset-instances client |
158 | 161 | [project-id display-action-logs] |
159 | 162 | ts-ids |
160 | 163 | (string/join "," test-ids-bucket))) |
161 | 164 | (partition-all max-test-ids-bucket-size all-test-ids)) |
| 165 | + |
| 166 | + testname-to-params (when (not-empty pt-instance-params) |
| 167 | + (into {} |
| 168 | + (map |
| 169 | + (fn [[key tests]] |
| 170 | + {key |
| 171 | + (into [] |
| 172 | + (map |
| 173 | + (fn [test] |
| 174 | + (zipmap |
| 175 | + (iterate inc 1) |
| 176 | + (split-n-filter-instance-params test pt-instance-params))) tests))}) |
| 177 | + (group-by |
| 178 | + #(eval/sf-test-suite->pt-test-name options %) |
| 179 | + org-xml-tests)))) |
| 180 | + |
| 181 | + testname-test2 (when |
| 182 | + (not-empty pt-instance-params) |
| 183 | + (into |
| 184 | + #{} |
| 185 | + (map |
| 186 | + (fn [test] |
| 187 | + (str |
| 188 | + (eval/sf-test-suite->pt-test-name options test) ":" |
| 189 | + (split-n-filter-instance-params test pt-instance-params))) |
| 190 | + org-xml-tests))) |
| 191 | + |
162 | 192 | filter-instances (if (not-empty pt-instance-params) |
163 | 193 | (filter |
164 | 194 | (fn [instance] |
165 | 195 | (let |
166 | 196 | [{:keys [name bdd-parameters parameters]} (:attributes instance) |
167 | | - [_ xml-test test] (get testname-test name) |
168 | | - split-params (split-n-filter-instance-params test pt-instance-params) |
169 | | - xml-params (into {} (map (fn [[key value]] {(keyword key) value}) |
170 | | - (when (even? (count split-params)) |
171 | | - (apply array-map split-params)))) |
172 | | - test-type (:test-type (:attributes test)) |
173 | | - params (if (= test-type "BDDTest") bdd-parameters parameters)] |
174 | | - (= xml-params params))) |
| 197 | + obj-test (get testname-test name) |
| 198 | + test-type (:test-type (:attributes (last obj-test))) |
| 199 | + params (if (= test-type "BDDTest") bdd-parameters parameters) |
| 200 | + vals (into [] (if (map? params) (vals params) params))] |
| 201 | + (contains? testname-test2 (str name ":" vals)))) |
175 | 202 | instances) |
176 | 203 | instances) |
177 | 204 | log (when display-action-logs (do (log/infof "filter-instances: ") (pprint/pprint filter-instances))) |
|
186 | 213 | (last (last testset-id-name))))}) |
187 | 214 | testset-id-to-name)) |
188 | 215 | ts-id-instances (group-by (fn [inst] (get-in inst [:attributes :set-id])) filter-instances) |
| 216 | + |
189 | 217 | missing-instances (into {} |
190 | 218 | (doall |
191 | 219 | (for [ts-id (into () testset-ids)] |
192 | | - {ts-id (merge-with - |
193 | | - (get ts-id-instance-num ts-id) |
194 | | - (frequencies (vec (map #(get-in % [:attributes :test-id]) (get ts-id-instances (read-string ts-id))))))}))) |
195 | | - make-instances (flatten (api/make-instances missing-instances testid-params)) |
| 220 | + {ts-id |
| 221 | + (merge-with - |
| 222 | + (get ts-id-instance-num ts-id) |
| 223 | + (frequencies (vec (map #(get-in % [:attributes :test-id]) |
| 224 | + (get ts-id-instances (read-string ts-id))))))}))) |
| 225 | + |
| 226 | + existing-instance (when (not-empty pt-instance-params) |
| 227 | + (into {} |
| 228 | + (map |
| 229 | + (fn [[key tests]] |
| 230 | + {key |
| 231 | + (into [] |
| 232 | + (map |
| 233 | + (fn [test] |
| 234 | + (get-in test [:attributes :parameters])) tests))}) |
| 235 | + (group-by |
| 236 | + (fn [inst] |
| 237 | + (get-in inst [:attributes :name])) |
| 238 | + filter-instances)))) |
| 239 | + |
| 240 | + new-map (into {} |
| 241 | + (map |
| 242 | + (fn [test-name] |
| 243 | + (reduce (fn [a b] |
| 244 | + (if (= (keys a) (keys b)) |
| 245 | + {(first (keys a)) |
| 246 | + (into [] (conj |
| 247 | + (if (vector? (first (vals a))) |
| 248 | + (first (vals a)) |
| 249 | + (into [] (vals a))) |
| 250 | + (first (vals b))))} |
| 251 | + (conj a b))) |
| 252 | + {} |
| 253 | + (map (fn [x] |
| 254 | + {test-name |
| 255 | + (into {} |
| 256 | + (map (fn [y] |
| 257 | + {(keyword (str (first y))) |
| 258 | + (last y)}) |
| 259 | + x))}) |
| 260 | + (get testname-to-params test-name)))) |
| 261 | + (keys testname-to-params))) |
| 262 | + |
| 263 | + new-testname-to-params (into {} |
| 264 | + (map |
| 265 | + (fn [test-name] |
| 266 | + {test-name |
| 267 | + [(into {} (difference (set (get new-map test-name)) (set (get existing-instance test-name))))]}) |
| 268 | + (keys new-map))) |
| 269 | + |
| 270 | + make-instances (flatten (api/make-instances missing-instances new-testname-to-params test-id-testname)) |
196 | 271 | test-by-id (group-by (fn [test] (read-string (:id (last test)))) all-tests) |
197 | 272 | new-intstances (flatten (for [instances-part (partition-all 100 (shuffle make-instances))] |
198 | 273 | (api/ll-create-instances client [project-id display-action-logs] instances-part))) |
199 | | - all-intstances (into [] (concat new-intstances instances)) |
| 274 | + all-intstances (into [] (concat new-intstances filter-instances)) |
| 275 | + |
200 | 276 | instance-to-ts-test (group-by (fn [inst] [(:set-id (:attributes inst)) (:test-id (:attributes inst))]) all-intstances)] |
201 | 277 | (when display-run-time (print-run-time "Time - after create instances: %d:%d:%d" start-time)) |
202 | 278 | [test-by-id instance-to-ts-test])) |
|
0 commit comments