From 1d08d653e9e334bc6700f607932717f8a69c2184 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Mon, 17 Jun 2024 15:43:11 +0200 Subject: [PATCH] work in progress: server - basic config, start with dummy app --- config.lisp | 4 ++-- scopes-web.asd | 2 +- test/etc/config-web.lisp | 8 ++++++++ test/test-web.lisp | 18 +++++++++++++++--- web/server.lisp | 10 +++++++++- 5 files changed, 35 insertions(+), 7 deletions(-) create mode 100644 test/etc/config-web.lisp diff --git a/config.lisp b/config.lisp index 93a359c..e746639 100644 --- a/config.lisp +++ b/config.lisp @@ -25,8 +25,8 @@ (defclass root (common) ((env-keys :reader env-keys - :initform nil - :allocation :class) + :initarg :env-keys + :initform nil) (env-prefix :reader env-prefix :initarg :env-prefix :initform "SCOPES_") diff --git a/scopes-web.asd b/scopes-web.asd index 0b7ef0a..7a9aa7e 100644 --- a/scopes-web.asd +++ b/scopes-web.asd @@ -6,7 +6,7 @@ :version "0.0.1" :homepage "https://www.cyberconcepts.org" :description "Web client and server functionality." - :depends-on (:alexandria :com.inuoe.jzon :lack :log4cl :str + :depends-on (:alexandria :clack :com.inuoe.jzon :lack :log4cl :str :scopes-core) :components ((:file "web/server") (:file "util") diff --git a/test/etc/config-web.lisp b/test/etc/config-web.lisp new file mode 100644 index 0000000..ad38196 --- /dev/null +++ b/test/etc/config-web.lisp @@ -0,0 +1,8 @@ +;;;; cl-scopes/test/etc/config-web + +(in-package :scopes/test-web) + +(setf *config* + (make-instance 'config:root :env-keys '(:address :port))) + +(make-instance 'server:config :parent *config*) diff --git a/test/test-web.lisp b/test/test-web.lisp index 26a18fe..7c52de9 100644 --- a/test/test-web.lisp +++ b/test/test-web.lisp @@ -13,6 +13,18 @@ (defvar *config* nil) (defun run () - (let ((*config* nil) - (t:*test-suite* (t:test-suite "config"))))) - + (let ((t:*test-suite* (t:test-suite "web"))) + (load (t:test-path "config-web" "etc")) + (test-server) + (t:show-result))) + +(defun app (env) + '(200 (:content-type "text/plain") ("Hello World!"))) + +(t:deftest test-server () + (let ((cfg (car (config:children *config*)))) + (== (parse-integer (server:port cfg)) 8888) + (setf server:*server* + (clack:clackup #'app + :port (parse-integer (server:port cfg)) + :address (server:address cfg))))) diff --git a/web/server.lisp b/web/server.lisp index 271a867..bf36ab6 100644 --- a/web/server.lisp +++ b/web/server.lisp @@ -3,8 +3,16 @@ (defpackage :scopes/web/server (:use :common-lisp) (:local-nicknames (:config :scopes/config)) - (:export #:*server*)) + (:export #:config #:address #:port + #:*server*)) (in-package :scopes/web/server) +(defclass config (config:base) + ((address :reader address :initarg :address :initform "localhost") + (port :reader port :initarg :port :initform "8888"))) + +(defmethod initialize-instance :after ((cfg config) &key &allow-other-keys) + (config:hash-to-slots (config:env-data cfg) cfg '(address port))) + (defvar *server* nil)