77 libp2p/ protobuf/ minprotobuf,
88 libp2p/ stream/ [bufferstream, connection],
99 libp2p/ crypto/ crypto,
10+ libp2p/ protocols/ pubsub/ pubsub,
1011 libp2p/ protocols/ pubsub/ rpc/ message,
1112 ../../ waku/ v2/ waku_types,
1213 ../../ waku/ v2/ node/ wakunode2,
13- ../../ waku/ v2/ node/ jsonrpc/ [jsonrpc_types,store_api],
14+ ../../ waku/ v2/ node/ jsonrpc/ [jsonrpc_types,store_api,relay_api,debug_api ],
1415 ../../ waku/ v2/ protocol/ message_notifier,
1516 ../../ waku/ v2/ protocol/ waku_store/ waku_store,
1617 ../ test_helpers
@@ -19,21 +20,87 @@ template sourceDir*: string = currentSourcePath.rsplit(DirSep, 1)[0]
1920const sigPath = sourceDir / ParDir / ParDir / " waku" / " v2" / " node" / " jsonrpc" / " jsonrpc_callsigs.nim"
2021createRpcSigs (RpcHttpClient , sigPath)
2122
22- suite " Waku v2 JSON-RPC API" :
23+ procSuite " Waku v2 JSON-RPC API" :
24+ const defaultTopic = " /waku/2/default-waku/proto"
25+ const testCodec = " /waku/2/default-waku/codec"
2326
24- asyncTest " get_waku_v2_store_v1_messages" :
25- const defaultTopic = " /waku/2/default-waku/proto"
26- const testCodec = " /waku/2/default-waku/codec"
27+ let
28+ rng = crypto.newRng ()
29+ privkey = crypto.PrivateKey .random (Secp256k1 , rng[]).tryGet ()
30+ bindIp = ValidIpAddress .init (" 0.0.0.0" )
31+ extIp = ValidIpAddress .init (" 127.0.0.1" )
32+ port = Port (9000 )
33+ node = WakuNode .init (privkey, bindIp, port, some (extIp), some (port))
2734
28- # WakuNode setup
35+ asyncTest " debug_api" :
36+ waitFor node.start ()
37+
38+ waitFor node.mountRelay ()
39+
40+ # RPC server setup
2941 let
30- rng = crypto.newRng ()
31- privkey = crypto.PrivateKey .random (Secp256k1 , rng[]).tryGet ()
32- bindIp = ValidIpAddress .init (" 0.0.0.0" )
33- extIp = ValidIpAddress .init (" 127.0.0.1" )
34- port = Port (9000 )
35- node = WakuNode .init (privkey, bindIp, port, some (extIp), some (port))
42+ rpcPort = Port (8545 )
43+ ta = initTAddress (bindIp, rpcPort)
44+ server = newRpcHttpServer ([ta])
45+
46+ installDebugApiHandlers (node, server)
47+ server.start ()
48+
49+ let client = newRpcHttpClient ()
50+ await client.connect (" 127.0.0.1" , rpcPort)
51+
52+ let response = await client.get_waku_v2_debug_v1_info ()
53+
54+ check:
55+ response.listenStr == $ node.peerInfo.addrs[0 ] & " /p2p/" & $ node.peerInfo.peerId
56+
57+ server.stop ()
58+ server.close ()
59+ waitfor node.stop ()
60+
61+ asyncTest " relay_api" :
62+ waitFor node.start ()
63+
64+ waitFor node.mountRelay ()
65+
66+ # RPC server setup
67+ let
68+ rpcPort = Port (8545 )
69+ ta = initTAddress (bindIp, rpcPort)
70+ server = newRpcHttpServer ([ta])
71+
72+ installRelayApiHandlers (node, server)
73+ server.start ()
74+
75+ let client = newRpcHttpClient ()
76+ await client.connect (" 127.0.0.1" , rpcPort)
77+
78+ check:
79+ # At this stage the node is only subscribed to the default topic
80+ PubSub (node.wakuRelay).topics.len == 1
81+
82+ # Subscribe to new topics
83+ let newTopics = @ [" 1" ," 2" ," 3" ]
84+ var response = await client.post_waku_v2_relay_v1_subscriptions (newTopics)
85+
86+ check:
87+ # Node is now subscribed to default + new topics
88+ PubSub (node.wakuRelay).topics.len == 1 + newTopics.len
89+ response == true
90+
91+ # Unsubscribe from new topics
92+ response = await client.delete_waku_v2_relay_v1_subscriptions (newTopics)
93+
94+ check:
95+ # Node is now unsubscribed from new topics
96+ PubSub (node.wakuRelay).topics.len == 1
97+ response == true
98+
99+ server.stop ()
100+ server.close ()
101+ waitfor node.stop ()
36102
103+ asyncTest " store_api" :
37104 waitFor node.start ()
38105
39106 waitFor node.mountRelay (@ [defaultTopic])
@@ -44,7 +111,7 @@ suite "Waku v2 JSON-RPC API":
44111 ta = initTAddress (bindIp, rpcPort)
45112 server = newRpcHttpServer ([ta])
46113
47- setupWakuJSONRPC (node, server)
114+ installStoreApiHandlers (node, server)
48115 server.start ()
49116
50117 # WakuStore setup
0 commit comments