gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gnunet-scheme] 03/03: cadet/client: Define the record type for CADET ad


From: gnunet
Subject: [gnunet-scheme] 03/03: cadet/client: Define the record type for CADET addresses.
Date: Tue, 22 Feb 2022 20:36:46 +0100

This is an automated email from the git hooks/post-receive script.

maxime-devos pushed a commit to branch master
in repository gnunet-scheme.

commit 079243f8c8a9616dbf160554c3aa6cd517f1cd04
Author: Maxime Devos <maximedevos@telenet.be>
AuthorDate: Tue Feb 22 19:33:48 2022 +0000

    cadet/client: Define the record type for CADET addresses.
    
    * gnu/gnunet/cadet/client.scm (<cadet-address>): Unstub record type.
    * tests/cadet.scm (%peer-identity,%port): New variables.
      ("cadet-address?")
      ("cadet-address, deconstruct")
      ("cadet-address, wrong peer identity size (1)")
      ("cadet-address, wrong peer identity size (2)")
      ("cadet-address, wrong peer identity size (3)")
      ("cadet-address, wrong port size (1)")
      ("cadet-address, wrong port size (2)")
      ("cadet-address, wrong port size (3)")
      ("cadet-address, read-only port")
      ("cadet-address, read-only peer")
      ("cadet-address, independent slices")
      ("cadet-address, equal?"): New tests.
---
 gnu/gnunet/cadet/client.scm | 31 ++++++++++++++++++-----
 tests/cadet.scm             | 61 +++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 86 insertions(+), 6 deletions(-)

diff --git a/gnu/gnunet/cadet/client.scm b/gnu/gnunet/cadet/client.scm
index ab57e8b..f863d49 100644
--- a/gnu/gnunet/cadet/client.scm
+++ b/gnu/gnunet/cadet/client.scm
@@ -20,16 +20,24 @@
          make-cadet-address cadet-address? cadet-address-peer 
cadet-address-port
          channel? open-channel! close-channel!
          port? open-port! close-port!)
-  (import (only (gnu gnunet concurrency lost-and-found)
+  (import (only (gnu gnunet crypto struct)
+               /peer-identity)
+         (only (gnu gnunet concurrency lost-and-found)
                make-lost-and-found collect-lost-and-found-operation)
          (only (gnu gnunet mq handler) message-handlers)
          (only (gnu gnunet mq) close-queue!)
          (only (gnu gnunet server)
                maybe-send-control-message!* make-error-handler)
+         (only (gnu gnunet hashcode struct)
+               /hashcode:512)
          (only (gnu gnunet mq-impl stream) connect/fibers)
+         (only (gnu gnunet netstruct syntactic)
+               sizeof)
+         (only (gnu gnunet utils bv-slice)
+               slice-copy/read-only slice-length)
          (only (rnrs base)
                begin define lambda assert quote cons apply values
-               case else)
+               case else =)
          (only (rnrs records syntactic) define-record-type)
          (only (ice-9 match) match)
          (only (guile) define*)
@@ -111,12 +119,23 @@
       ;; Start the main event loop.
       (control))
 
+    (define-record-type (<cadet-address> make-cadet-address cadet-address?)
+      (fields (immutable peer cadet-address-peer)
+             (immutable port cadet-address-port))
+      (protocol (lambda (%make)
+                 "Make a CADET address for contacting the peer @var{peer}
+(a readable bytevector slice containing a @code{/peer-identity}) at port
+@var{port} (a readable bytevector slice containing a @code{/hashcode:512}).
+The slices @var{peer} and @var{port} are copied, so future changes to them
+do not have any impact on the cadet address."
+                 (lambda (peer port)
+                   (assert (= (sizeof /peer-identity '()) (slice-length peer)))
+                   (assert (= (sizeof /hashcode:512 '()) (slice-length port)))
+                   (%make (slice-copy/read-only peer)
+                          (slice-copy/read-only port))))))
+
     (define (stub . foo)
       (error "todo"))
-    (define make-cadet-address stub)
-    (define cadet-address? stub)
-    (define cadet-address-peer stub)
-    (define cadet-address-port stub)
     (define channel? stub)
     (define open-channel! stub)
     (define close-channel! stub)
diff --git a/tests/cadet.scm b/tests/cadet.scm
index b509ccf..5a395cc 100644
--- a/tests/cadet.scm
+++ b/tests/cadet.scm
@@ -17,6 +17,11 @@
 ;; SPDX-License-Identifier: AGPL-3.0-or-later
 (define-module (test-distributed-hash-table))
 (import (gnu gnunet cadet client)
+       (gnu gnunet utils bv-slice)
+       (gnu gnunet netstruct syntactic)
+       (gnu gnunet crypto struct)
+       (gnu gnunet hashcode struct)
+       (rnrs bytevectors)
        (srfi srfi-64)
        (tests utils))
 
@@ -25,4 +30,60 @@
   (close-not-connected-no-fallbacks "cadet" connect disconnect!))
 (test-assert "(CADET) garbage collectable"
   (garbage-collectable "cadet" connect))
+
+(define %peer-identity
+  (bv-slice/read-write (u8-list->bytevector (iota (sizeof /peer-identity 
'())))))
+(define %port
+  (bv-slice/read-write
+   (u8-list->bytevector (map (lambda (x) (- 255 x))
+                            (iota (sizeof /hashcode:512 '()))))))
+(test-assert "cadet-address?"
+  (and (cadet-address? (make-cadet-address %peer-identity %port))
+       (not (cadet-address? 'foobar))))
+
+(test-equal "cadet-address, deconstruct"
+  '(#true #true)
+  (let ((cadet (make-cadet-address %peer-identity %port)))
+    ;; TODO: extend 'bytevector=?' to accept ranges, then define
+    ;; 'slice=?'.
+    (list (equal? (cadet-address-peer cadet) (slice/read-only %peer-identity))
+         (equal? (cadet-address-port cadet) (slice/read-only %port)))))
+
+(test-error "cadet-address, wrong peer identity size (1)" #f
+           (make-cadet-address (make-slice/read-write 0) %port))
+(test-error "cadet-address, wrong peer identity size (2)" #f
+           (make-cadet-address
+            (make-slice/read-write (- (sizeof /peer-identity '()) 1)) %port))
+(test-error "cadet-address, wrong peer identity size (3)" #f
+           (make-cadet-address
+            (make-slice/read-write (+ (sizeof /peer-identity '()) 1)) %port))
+
+(test-error "cadet-address, wrong port size (1)" #f
+           (make-cadet-address %peer-identity (make-slice/read-write 0)))
+(test-error "cadet-address, wrong port size (2)" #f
+           (make-cadet-address
+            %peer-identity
+            (make-slice/read-write (- (sizeof /hashcode:512 '()) 1))))
+(test-error "cadet-address, wrong port size (3)" #f
+           (make-cadet-address
+            %peer-identity
+            (make-slice/read-write (+ (sizeof /hashcode:512 '()) 1))))
+
+(test-assert "cadet-address, read-only port"
+  (let ((slice (cadet-address-port (make-cadet-address %peer-identity %port))))
+    (and (slice-readable? slice) (not (slice-writable? slice)))))
+(test-assert "cadet-address, read-only peer"
+  (let ((slice (cadet-address-peer (make-cadet-address %peer-identity %port))))
+    (and (slice-readable? slice) (not (slice-writable? slice)))))
+
+(test-assert "cadet-address, independent slices"
+  (let ((struct (make-cadet-address %peer-identity %port)))
+    (and (slice-independent? %peer-identity (cadet-address-peer struct))
+        (slice-independent? %port (cadet-address-port struct)))))
+
+(test-equal "cadet-address, equal?"
+  (make-cadet-address %peer-identity %port)
+  (make-cadet-address (slice-copy/read-only %peer-identity)
+                     (slice-copy/read-only %port)))
+
 (test-end "CADET")

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]