summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/machine/hetzner/http.scm172
1 files changed, 83 insertions, 89 deletions
diff --git a/tests/machine/hetzner/http.scm b/tests/machine/hetzner/http.scm
index 2e7d140c7f9..68dd278655a 100644
--- a/tests/machine/hetzner/http.scm
+++ b/tests/machine/hetzner/http.scm
@@ -1,5 +1,6 @@
1;;; GNU Guix --- Functional package management for GNU 1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2024 Roman Scherer <roman@burningswell.com> 2;;; Copyright © 2024 Roman Scherer <roman@burningswell.com>
3;;; Copyright © 2026 Ludovic Courtès <ludo@gnu.org>
3;;; 4;;;
4;;; This file is part of GNU Guix. 5;;; This file is part of GNU Guix.
5;;; 6;;;
@@ -17,7 +18,6 @@
17;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. 18;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
18 19
19(define-module (tests machine hetzner http) 20(define-module (tests machine hetzner http)
20 #:use-module (debugging assert)
21 #:use-module (gnu machine hetzner http) 21 #:use-module (gnu machine hetzner http)
22 #:use-module (guix build utils) 22 #:use-module (guix build utils)
23 #:use-module (guix tests) 23 #:use-module (guix tests)
@@ -321,20 +321,21 @@
321 (let ((actions (list action-create-server-alist action-delete-server-alist))) 321 (let ((actions (list action-create-server-alist action-delete-server-alist)))
322 (mock ((gnu machine hetzner http) hetzner-api-request-send 322 (mock ((gnu machine hetzner http) hetzner-api-request-send
323 (lambda* (request #:key expected) 323 (lambda* (request #:key expected)
324 (assert (equal? 'GET (hetzner-api-request-method request))) 324 (match (list (hetzner-api-request-method request)
325 (assert (equal? "https://api.hetzner.cloud/v1/actions" 325 (hetzner-api-request-url request))
326 (hetzner-api-request-url request))) 326 (('GET "https://api.hetzner.cloud/v1/actions")
327 (assert (unspecified? (hetzner-api-request-body request))) 327 (and (unspecified? (hetzner-api-request-body request))
328 (assert (equal? `(("page" . 1) 328 (equal? `(("page" . 1)
329 ("id" . ,(string-join 329 ("id" . ,(string-join
330 (map (lambda (action) 330 (map (lambda (action)
331 (number->string (assoc-ref action "id"))) 331 (number->string (assoc-ref action "id")))
332 actions) 332 actions)
333 ","))) 333 ",")))
334 (hetzner-api-request-params request))) 334 (hetzner-api-request-params request))
335 (hetzner-api-response 335 (hetzner-api-response
336 (body `(("meta" . ,meta-page-alist) 336 (body `(("meta" . ,meta-page-alist)
337 ("actions" . #(,action-create-server-alist ,action-delete-server-alist))))))) 337 ("actions" . #(,action-create-server-alist
338 ,action-delete-server-alist))))))))))
338 (hetzner-api-actions (hetzner-api) 339 (hetzner-api-actions (hetzner-api)
339 (map (lambda (action) 340 (map (lambda (action)
340 (assoc-ref action "id")) 341 (assoc-ref action "id"))
@@ -344,28 +345,30 @@
344 (list location-falkenstein) 345 (list location-falkenstein)
345 (mock ((gnu machine hetzner http) hetzner-api-request-send 346 (mock ((gnu machine hetzner http) hetzner-api-request-send
346 (lambda* (request #:key expected) 347 (lambda* (request #:key expected)
347 (assert (equal? 'GET (hetzner-api-request-method request))) 348 (match (list (hetzner-api-request-method request)
348 (assert (equal? "https://api.hetzner.cloud/v1/locations" 349 (hetzner-api-request-url request))
349 (hetzner-api-request-url request))) 350 (('GET "https://api.hetzner.cloud/v1/locations")
350 (assert (unspecified? (hetzner-api-request-body request))) 351 (and (unspecified? (hetzner-api-request-body request))
351 (assert (equal? '(("page" . 1)) (hetzner-api-request-params request))) 352 (equal? '(("page" . 1))
352 (hetzner-api-response 353 (hetzner-api-request-params request))
353 (body `(("meta" . ,meta-page-alist) 354 (hetzner-api-response
354 ("locations" . #(,location-falkenstein-alist))))))) 355 (body `(("meta" . ,meta-page-alist)
356 ("locations" . #(,location-falkenstein-alist))))))))))
355 (hetzner-api-locations (hetzner-api)))) 357 (hetzner-api-locations (hetzner-api))))
356 358
357(test-equal "hetzner-api-server-types-unit" 359(test-equal "hetzner-api-server-types-unit"
358 (list server-type-cpx-11) 360 (list server-type-cpx-11)
359 (mock ((gnu machine hetzner http) hetzner-api-request-send 361 (mock ((gnu machine hetzner http) hetzner-api-request-send
360 (lambda* (request #:key expected) 362 (lambda* (request #:key expected)
361 (assert (equal? 'GET (hetzner-api-request-method request))) 363 (match (list (hetzner-api-request-method request)
362 (assert (equal? "https://api.hetzner.cloud/v1/server_types" 364 (hetzner-api-request-url request))
363 (hetzner-api-request-url request))) 365 (('GET "https://api.hetzner.cloud/v1/server_types")
364 (assert (unspecified? (hetzner-api-request-body request))) 366 (and (unspecified? (hetzner-api-request-body request))
365 (assert (equal? '(("page" . 1)) (hetzner-api-request-params request))) 367 (equal? '(("page" . 1))
366 (hetzner-api-response 368 (hetzner-api-request-params request))
367 (body `(("meta" . ,meta-page-alist) 369 (hetzner-api-response
368 ("server_types" . #(,server-type-cpx-11-alist))))))) 370 (body `(("meta" . ,meta-page-alist)
371 ("server_types" . #(,server-type-cpx-11-alist))))))))))
369 (hetzner-api-server-types (hetzner-api)))) 372 (hetzner-api-server-types (hetzner-api))))
370 373
371(test-equal "hetzner-api-server-create-unit" 374(test-equal "hetzner-api-server-create-unit"
@@ -400,15 +403,12 @@
400 #(10 17 11 2 1 125 0 32 -1 0 #f) "success") 403 #(10 17 11 2 1 125 0 32 -1 0 #f) "success")
401 (mock ((gnu machine hetzner http) hetzner-api-request-send 404 (mock ((gnu machine hetzner http) hetzner-api-request-send
402 (lambda* (request #:key expected) 405 (lambda* (request #:key expected)
403 (cond 406 (match (list (hetzner-api-request-method request)
404 ((equal? "https://api.hetzner.cloud/v1/servers/59570198" 407 (hetzner-api-request-url request))
405 (hetzner-api-request-url request)) 408 (('DELETE "https://api.hetzner.cloud/v1/servers/59570198")
406 (assert (equal? 'DELETE (hetzner-api-request-method request)))
407 (hetzner-api-response 409 (hetzner-api-response
408 (body `(("action" . ,action-delete-server-alist))))) 410 (body `(("action" . ,action-delete-server-alist)))))
409 ((equal? "https://api.hetzner.cloud/v1/actions" 411 (('GET "https://api.hetzner.cloud/v1/actions")
410 (hetzner-api-request-url request))
411 (assert (equal? 'GET (hetzner-api-request-method request)))
412 (hetzner-api-response 412 (hetzner-api-response
413 (body `(("actions" . ,(vector (cons `("status" . "success") 413 (body `(("actions" . ,(vector (cons `("status" . "success")
414 action-delete-server-alist))) 414 action-delete-server-alist)))
@@ -419,15 +419,13 @@
419 action-enable-rescue 419 action-enable-rescue
420 (mock ((gnu machine hetzner http) hetzner-api-request-send 420 (mock ((gnu machine hetzner http) hetzner-api-request-send
421 (lambda* (request #:key expected) 421 (lambda* (request #:key expected)
422 (cond 422 (match (list (hetzner-api-request-method request)
423 ((equal? "https://api.hetzner.cloud/v1/servers/59570198/actions/enable_rescue" 423 (hetzner-api-request-url request))
424 (hetzner-api-request-url request)) 424 (('POST
425 (assert (equal? 'POST (hetzner-api-request-method request))) 425 "https://api.hetzner.cloud/v1/servers/59570198/actions/enable_rescue")
426 (hetzner-api-response 426 (hetzner-api-response
427 (body `(("action" . ,action-enable-rescue-alist))))) 427 (body `(("action" . ,action-enable-rescue-alist)))))
428 ((equal? "https://api.hetzner.cloud/v1/actions" 428 (('GET "https://api.hetzner.cloud/v1/actions")
429 (hetzner-api-request-url request))
430 (assert (equal? 'GET (hetzner-api-request-method request)))
431 (hetzner-api-response 429 (hetzner-api-response
432 (body `(("actions" . ,(vector (cons `("status" . "success") 430 (body `(("actions" . ,(vector (cons `("status" . "success")
433 action-enable-rescue-alist))) 431 action-enable-rescue-alist)))
@@ -439,15 +437,13 @@
439 action-power-on 437 action-power-on
440 (mock ((gnu machine hetzner http) hetzner-api-request-send 438 (mock ((gnu machine hetzner http) hetzner-api-request-send
441 (lambda* (request #:key expected) 439 (lambda* (request #:key expected)
442 (cond 440 (match (list (hetzner-api-request-method request)
443 ((equal? "https://api.hetzner.cloud/v1/servers/59570198/actions/poweron" 441 (hetzner-api-request-url request))
444 (hetzner-api-request-url request)) 442 (('POST
445 (assert (equal? 'POST (hetzner-api-request-method request))) 443 "https://api.hetzner.cloud/v1/servers/59570198/actions/poweron")
446 (hetzner-api-response 444 (hetzner-api-response
447 (body `(("action" . ,action-power-on-alist))))) 445 (body `(("action" . ,action-power-on-alist)))))
448 ((equal? "https://api.hetzner.cloud/v1/actions" 446 (('GET "https://api.hetzner.cloud/v1/actions")
449 (hetzner-api-request-url request))
450 (assert (equal? 'GET (hetzner-api-request-method request)))
451 (hetzner-api-response 447 (hetzner-api-response
452 (body `(("actions" . ,(vector (cons `("status" . "success") 448 (body `(("actions" . ,(vector (cons `("status" . "success")
453 action-power-on-alist))) 449 action-power-on-alist)))
@@ -458,15 +454,13 @@
458 action-power-off 454 action-power-off
459 (mock ((gnu machine hetzner http) hetzner-api-request-send 455 (mock ((gnu machine hetzner http) hetzner-api-request-send
460 (lambda* (request #:key expected) 456 (lambda* (request #:key expected)
461 (cond 457 (match (list (hetzner-api-request-method request)
462 ((equal? "https://api.hetzner.cloud/v1/servers/59570198/actions/poweroff" 458 (hetzner-api-request-url request))
463 (hetzner-api-request-url request)) 459 (('POST
464 (assert (equal? 'POST (hetzner-api-request-method request))) 460 "https://api.hetzner.cloud/v1/servers/59570198/actions/poweroff")
465 (hetzner-api-response 461 (hetzner-api-response
466 (body `(("action" . ,action-power-off-alist))))) 462 (body `(("action" . ,action-power-off-alist)))))
467 ((equal? "https://api.hetzner.cloud/v1/actions" 463 (('GET "https://api.hetzner.cloud/v1/actions")
468 (hetzner-api-request-url request))
469 (assert (equal? 'GET (hetzner-api-request-method request)))
470 (hetzner-api-response 464 (hetzner-api-response
471 (body `(("actions" . ,(vector (cons `("status" . "success") 465 (body `(("actions" . ,(vector (cons `("status" . "success")
472 action-power-off-alist))) 466 action-power-off-alist)))
@@ -477,15 +471,13 @@
477 action-reboot 471 action-reboot
478 (mock ((gnu machine hetzner http) hetzner-api-request-send 472 (mock ((gnu machine hetzner http) hetzner-api-request-send
479 (lambda* (request #:key expected) 473 (lambda* (request #:key expected)
480 (cond 474 (match (list (hetzner-api-request-method request)
481 ((equal? "https://api.hetzner.cloud/v1/servers/59570198/actions/reboot" 475 (hetzner-api-request-url request))
482 (hetzner-api-request-url request)) 476 (('POST
483 (assert (equal? 'POST (hetzner-api-request-method request))) 477 "https://api.hetzner.cloud/v1/servers/59570198/actions/reboot")
484 (hetzner-api-response 478 (hetzner-api-response
485 (body `(("action" . ,action-reboot-alist))))) 479 (body `(("action" . ,action-reboot-alist)))))
486 ((equal? "https://api.hetzner.cloud/v1/actions" 480 (('GET "https://api.hetzner.cloud/v1/actions")
487 (hetzner-api-request-url request))
488 (assert (equal? 'GET (hetzner-api-request-method request)))
489 (hetzner-api-response 481 (hetzner-api-response
490 (body `(("actions" . ,(vector (cons `("status" . "success") 482 (body `(("actions" . ,(vector (cons `("status" . "success")
491 action-reboot-alist))) 483 action-reboot-alist)))
@@ -505,16 +497,16 @@
505 ssh-key-root 497 ssh-key-root
506 (mock ((gnu machine hetzner http) hetzner-api-request-send 498 (mock ((gnu machine hetzner http) hetzner-api-request-send
507 (lambda* (request #:key expected) 499 (lambda* (request #:key expected)
508 (assert (equal? 'POST (hetzner-api-request-method request))) 500 (match (list (hetzner-api-request-method request)
509 (assert (equal? "https://api.hetzner.cloud/v1/ssh_keys" 501 (hetzner-api-request-url request))
510 (hetzner-api-request-url request))) 502 (('POST "https://api.hetzner.cloud/v1/ssh_keys")
511 (assert (equal? `(("name" . "guix-hetzner-api-test-key") 503 (and (equal? `(("name" . "guix-hetzner-api-test-key")
512 ("public_key" . "ssh-ed25519 ABCAC3NzaC1lZDI1NTE5AAAAIBT3lLYPfOZV9NNrNk0jGCufWmXbFSz+ORxowJdHoSIM") 504 ("public_key" . "ssh-ed25519 ABCAC3NzaC1lZDI1NTE5AAAAIBT3lLYPfOZV9NNrNk0jGCufWmXbFSz+ORxowJdHoSIM")
513 ("labels" . (("a" . "1")))) 505 ("labels" . (("a" . "1"))))
514 (hetzner-api-request-body request))) 506 (hetzner-api-request-body request))
515 (assert (equal? `() (hetzner-api-request-params request))) 507 (null? (hetzner-api-request-params request))
516 (hetzner-api-response 508 (hetzner-api-response
517 (body `(("ssh_key" . ,ssh-key-root-alist)))))) 509 (body `(("ssh_key" . ,ssh-key-root-alist)))))))))
518 (hetzner-api-ssh-key-create 510 (hetzner-api-ssh-key-create
519 (hetzner-api) 511 (hetzner-api)
520 "guix-hetzner-api-test-key" 512 "guix-hetzner-api-test-key"
@@ -524,38 +516,40 @@
524(test-assert "hetzner-api-ssh-key-delete-unit" 516(test-assert "hetzner-api-ssh-key-delete-unit"
525 (mock ((gnu machine hetzner http) hetzner-api-request-send 517 (mock ((gnu machine hetzner http) hetzner-api-request-send
526 (lambda* (request #:key expected) 518 (lambda* (request #:key expected)
527 (assert (equal? "https://api.hetzner.cloud/v1/ssh_keys/16510983" 519 (match (list (hetzner-api-request-method request)
528 (hetzner-api-request-url request))) 520 (hetzner-api-request-url request))
529 (assert (equal? 'DELETE (hetzner-api-request-method request))) 521 (('DELETE "https://api.hetzner.cloud/v1/ssh_keys/16510983")
530 (hetzner-api-response))) 522 (hetzner-api-response)))))
531 (hetzner-api-ssh-key-delete (hetzner-api) ssh-key-root))) 523 (hetzner-api-ssh-key-delete (hetzner-api) ssh-key-root)))
532 524
533(test-equal "hetzner-api-ssh-keys-unit" 525(test-equal "hetzner-api-ssh-keys-unit"
534 (list ssh-key-root) 526 (list ssh-key-root)
535 (mock ((gnu machine hetzner http) hetzner-api-request-send 527 (mock ((gnu machine hetzner http) hetzner-api-request-send
536 (lambda* (request #:key expected) 528 (lambda* (request #:key expected)
537 (assert (equal? 'GET (hetzner-api-request-method request))) 529 (match (list (hetzner-api-request-method request)
538 (assert (equal? "https://api.hetzner.cloud/v1/ssh_keys" 530 (hetzner-api-request-url request))
539 (hetzner-api-request-url request))) 531 (('GET "https://api.hetzner.cloud/v1/ssh_keys")
540 (assert (unspecified? (hetzner-api-request-body request))) 532 (and (unspecified? (hetzner-api-request-body request))
541 (assert (equal? '(("page" . 1)) (hetzner-api-request-params request))) 533 (equal? '(("page" . 1))
542 (hetzner-api-response 534 (hetzner-api-request-params request))
543 (body `(("meta" . ,meta-page-alist) 535 (hetzner-api-response
544 ("ssh_keys" . #(,ssh-key-root-alist))))))) 536 (body `(("meta" . ,meta-page-alist)
537 ("ssh_keys" . #(,ssh-key-root-alist))))))))))
545 (hetzner-api-ssh-keys (hetzner-api)))) 538 (hetzner-api-ssh-keys (hetzner-api))))
546 539
547(test-equal "hetzner-api-primary-ips-unit" 540(test-equal "hetzner-api-primary-ips-unit"
548 (list primary-ip) 541 (list primary-ip)
549 (mock ((gnu machine hetzner http) hetzner-api-request-send 542 (mock ((gnu machine hetzner http) hetzner-api-request-send
550 (lambda* (request #:key expected) 543 (lambda* (request #:key expected)
551 (assert (equal? 'GET (hetzner-api-request-method request))) 544 (match (list (hetzner-api-request-method request)
552 (assert (equal? "https://api.hetzner.cloud/v1/primary_ips" 545 (hetzner-api-request-url request))
553 (hetzner-api-request-url request))) 546 (('GET "https://api.hetzner.cloud/v1/primary_ips")
554 (assert (unspecified? (hetzner-api-request-body request))) 547 (and (unspecified? (hetzner-api-request-body request))
555 (assert (equal? '(("page" . 1)) (hetzner-api-request-params request))) 548 (equal? '(("page" . 1))
556 (hetzner-api-response 549 (hetzner-api-request-params request))
557 (body `(("meta" . ,meta-page-alist) 550 (hetzner-api-response
558 ("primary_ips" . #(,primary-ip-alist))))))) 551 (body `(("meta" . ,meta-page-alist)
552 ("primary_ips" . #(,primary-ip-alist))))))))))
559 (hetzner-api-primary-ips (hetzner-api)))) 553 (hetzner-api-primary-ips (hetzner-api))))
560 554
561;; Integration tests 555;; Integration tests