1{ pkgs, lib, ... }: 2let 3 listenAddress = "127.0.0.1"; 4 listenPort = 7700; 5 apiUrl = "http://${listenAddress}:${toString listenPort}"; 6 uid = "movies"; 7 indexJSON = pkgs.writeText "index.json" (builtins.toJSON { inherit uid; }); 8 moviesJSON = pkgs.fetchurl { 9 url = "https://github.com/meilisearch/meilisearch/raw/v0.23.1/datasets/movies/movies.json"; 10 sha256 = "1r3srld63dpmg9yrmysm6xl175661j5cspi93mk5q2wf8xwn50c5"; 11 }; 12in 13{ 14 name = "meilisearch"; 15 meta.maintainers = with lib.maintainers; [ Br1ght0ne ]; 16 17 nodes.machine = 18 { ... }: 19 { 20 environment.systemPackages = with pkgs; [ 21 curl 22 jq 23 ]; 24 services.meilisearch = { 25 enable = true; 26 inherit listenAddress listenPort; 27 }; 28 }; 29 30 testScript = '' 31 import json 32 33 start_all() 34 35 machine.wait_for_unit("meilisearch") 36 machine.wait_for_open_port(7700) 37 38 def wait_task(cmd): 39 response = json.loads(machine.succeed(cmd)) 40 task_uid = response["taskUid"] 41 machine.wait_until_succeeds( 42 f"curl ${apiUrl}/tasks/{task_uid} | jq -e '.status | IN(\"succeeded\", \"failed\", \"canceled\")'" 43 ) 44 machine.succeed(f"curl ${apiUrl}/tasks/{task_uid} | jq -e '.status == \"succeeded\"'") 45 return response 46 47 with subtest("check version"): 48 version = json.loads(machine.succeed("curl ${apiUrl}/version")) 49 assert version["pkgVersion"] == "${pkgs.meilisearch.version}" 50 51 with subtest("create index"): 52 wait_task("curl -X POST -H 'Content-Type: application/json' ${apiUrl}/indexes --data @${indexJSON}") 53 indexes = json.loads(machine.succeed("curl ${apiUrl}/indexes")) 54 assert indexes["total"] == 1, "index wasn't created" 55 56 with subtest("add documents"): 57 wait_task("curl -X POST -H 'Content-Type: application/json' ${apiUrl}/indexes/${uid}/documents --data-binary @${moviesJSON}") 58 59 with subtest("search"): 60 response = json.loads( 61 machine.succeed("curl ${apiUrl}/indexes/movies/search?q=hero") 62 ) 63 print(response) 64 assert len(response["hits"]) >= 1, "no results found" 65 ''; 66}