(defpackage #:nekod.tests (:use #:cl #:nekod)) (in-package #:nekod.tests) (defun run-tests () (let ((passed 0) (failed 0)) (flet ((check (name result expected) (if (equal result expected) (progn (incf passed) (format t " PASS ~a~%" name)) (progn (incf failed) (format t " FAIL ~a: got ~s expected ~s~%" name result expected))))) ;; Test 1: container-spec creation (let ((spec (make-container-spec :name "test" :image "alpine:latest" :ports '((8080 . 80)) :env '((:MODE . "test"))))) (check "container-spec name" (container-spec-name spec) "test") (check "container-spec image" (container-spec-image spec) "alpine:latest")) ;; Test 2: nekod-eval on a spec (let ((spec (make-container-spec :name "eval-test" :image "nginx:latest"))) (check "nekod-eval returns spec" (eq (nekod-eval spec) spec) t)) ;; Test 3: save/restore snapshot (let* ((spec (make-container-spec :name "snap-test" :image "redis:latest")) (snap (save-nekod-image "/tmp/nekod-test.snap" (list spec)))) (check "snapshot version" (nekod-snapshot-version snap) "0.1.0") (check "snapshot has containers" (length (nekod-snapshot-containers snap)) 1)) ;; Test 4: HTTP request building (let ((req (nekod.docker:build-http-request "GET" "/containers/json"))) (check "GET request contains method" (search "GET" req) 0)) (format t "~%Results: ~a passed, ~a failed~%" passed failed) (= failed 0)))) (run-tests)