aboutsummaryrefslogtreecommitdiff
path: root/src/test/java/org/gnunet/mesh/MeshTest.java
blob: d840b88b2f4b851d9c722afb11a1d3bc22e3ca80 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
package org.gnunet.mesh;

import org.gnunet.core.Core;
import org.gnunet.core.PeerIdentityContinuation;
import org.gnunet.testing.TestingFixture;
import org.gnunet.testing.TestingSubsystem;
import org.gnunet.util.*;
import org.junit.Test;

/**
 * ...
 *
 * @author Florian Dold
 */
public class MeshTest extends TestingFixture {
    public static class MessageHandler1 extends MeshRunabout {
        public Mesh m1;
        public Mesh m2;
        public void visit(TestMessage m) {
            System.out.println("got test message");
            m1.destroy();
            m2.destroy();
        }
    }

    public static class MyTunnelEndHandler implements TunnelEndHandler {
        Mesh mesh1;
        PeerIdentity peerIdentity;
        @Override
        public void onChannelEnd(Mesh.Channel channel) {
            Mesh.Channel<Void> myChannel = mesh1.createTunnel(peerIdentity, 42, false, true, null);
            myChannel.send(new TestMessage());
        }
    }

    /**
     * Send a message locally, to our own peer.
     */
    @Test (timeout = 5000)
    public void test_mesh_send() {
        Program.configureLogging("DEBUG");
        // we want the full arm here (starts both mesh and core)
        final TestingSubsystem ts = new TestingSubsystem("arm");
        final Configuration cfg = ts.getConfiguration();

        final MessageHandler1 mh = new MessageHandler1();
        // FIXME: use CryptoEcc instead of Core once available and compatible
        Core.withPeerIdentity(cfg, new PeerIdentityContinuation() {
            @Override
            public void cont(PeerIdentity peerIdentity) {
                System.out.println("got peer identity from core");
                //
                MyTunnelEndHandler teh = new MyTunnelEndHandler();
                // first mesh handle, used to send the message
                final Mesh mesh1 = new Mesh(cfg, teh);
                teh.mesh1 = mesh1;
                teh.peerIdentity = peerIdentity;
                // second mesh handle, used to receive the message
                final Mesh mesh2 = new Mesh(cfg, new InboundChannelHandler() {
                    @Override
                    public void onInboundTunnel(Mesh.Channel tunnel, PeerIdentity initiator) {
                        System.out.println("got inbound channel " + initiator);
                    }
                }, new TunnelEndHandler() {
                    @Override
                    public void onChannelEnd(Mesh.Channel tunnel) {
                        System.out.println("channel end handler called");
                    }
                }, mh, 42);
                mh.m1 = mesh1;
                mh.m2 = mesh2;
                Mesh.Channel<Void> channel = mesh1.createTunnel(peerIdentity, 42, false, true, null);
                channel.send(new TestMessage());
            }
        });
        Scheduler.run();
    }
}