File size: 1,626 Bytes
3b70664
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
(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)