at 25.11-pre 1.5 kB view raw
1{ lib, ... }: 2 3let 4 domain = "h2o.local"; 5 6 port = 8080; 7 8 sawatdi_chao_lok = ""; 9in 10{ 11 name = "h2o-mruby"; 12 13 meta = { 14 maintainers = with lib.maintainers; [ toastal ]; 15 }; 16 17 nodes = { 18 server = 19 { pkgs, ... }: 20 { 21 services.h2o = { 22 enable = true; 23 package = pkgs.h2o.override { withMruby = true; }; 24 settings = { 25 listen = port; 26 hosts = { 27 "${domain}" = { 28 paths = { 29 "/hello_world" = { 30 "mruby.handler" = # ruby 31 '' 32 Proc.new do |env| 33 [200, {'content-type' => 'text/plain'}, ["${sawatdi_chao_lok}"]] 34 end 35 ''; 36 }; 37 "/file_handler" = { 38 "mruby.handler-file" = ./file_handler.rb; 39 }; 40 }; 41 }; 42 }; 43 }; 44 }; 45 46 networking.extraHosts = '' 47 127.0.0.1 ${domain} 48 ''; 49 }; 50 }; 51 52 testScript = 53 let 54 portStr = builtins.toString port; 55 in 56 # python 57 '' 58 server.wait_for_unit("h2o.service") 59 server.wait_for_open_port(${portStr}) 60 61 assert "${sawatdi_chao_lok}" in server.succeed("curl --fail-with-body http://${domain}:${portStr}/hello_world") 62 63 assert "FILE_HANDLER" in server.succeed("curl --fail-with-body http://${domain}:${portStr}/file_handler") 64 ''; 65}