aboutsummaryrefslogtreecommitdiff
path: root/ISSUES
blob: 4b5544d558ceb6242b22126960bed33604b4041f (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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
in gnunet-java-ext there is a working example of a service and a corresponding client program, that actually work ;)
 * simple greeting server, client gives name and server returns greeting
 * illustrates using program/service, using the configuration, creating messages
 * works with os control pipe / arm

arm-4477 WARNING Configuration file `(null)' for service `greeting' not valid: option missing

even when not using the signal pipe, does arm really kill processes?
 * arm does never seem to send a sigkill if process does not respond
 * sometimes arm command hangs!

 $ gnunet-arm -c config/greeting.conf -k greeting -LDEBUG
 Aug 29 19:25:22-808046 arm-api-5971 INFO Stopping service `greeting' within 60000 ms
 Service `greeting' was already not running.


Aug 29 18:21:19-505909 arm-4751 ERROR Failed to start service `greeting'
Service `greeting' has been started.

logging with arm: what gets piped to where
 * seems like service stdout->/dev/null, service stderr->arm stderr

Construct: has gotten very complex, i'm currently trying to trace a particular bug
 * UPDATE: bug is gone!
 * unit tests for construct have gotten better, still not good enough
 * FrameSize
 * recursive messages
  * indirect recursion (over unions) (see core.SendMessage) works
  * direct recursion has problems (see test/org.gnunet.construct.FrameSizeTest)

Question: Is all this too complicated? Should I invest the time to fix things as they are now intended, or should
we simplify?

* found some problems with timeouts in client/connection.
 * should i write unit-tests for this timing-stuff?
 * UPDATE: should be fixed now!

* program/service in general:
 * how to handle the return value of main?
 * java has no return value for main
 * we must use System.exit(n) instead
 * how about a (Program/Service).exit(n) that does cleanup and then calls System.exit(n)?

* configuration: what is $DEFAULTCONFIG? and CONFIG=?

mesh:
 * we can't use multipe instances of org.gnunet.mesh.Mesh to test the API
  * the local peer can't be the peer on the other end!
  * the C-api has practically no coverage on mesh_api.c
  * see below for a suggestion!
 * LOCAL_TUNNEL_CREATE was used for two things, creating tunnels and being notified about incoming tunnels

* extending org.gnunet.testing so that multiple peers can be started and communicate with each other!
 * the C-testing-api allows to create multiple peers, but they don't seem to be able to communicate with each
   other!
 * => the peers should somehow exchange their hellos / use a shared directory for the hellos

 testbed vs testing: is this correct?
  * testbed for large-scale testing across many "real" nodes
  * testing for testcases on one host

* test coverage approaching a better state, any feedback?

* I think there should be some documentation in addition to the source code and the tutorial
 * what would be the preferred format for such documentation? latex?
 * (considering that they perhaps should end up on a website / should be browsable)
 * examples:
  * how do unions work in construct?
  * other stuff in construct
  * how does annotation processing work?
  * project layout - what goes where
   * as there is no standard java project layout


rationale for putting org.gnunet.testing in the src/-tree, not in test/:
 * when developing an extension for gnunet-java, the developers may want to access the testing functionality from
   the jar, so it should be included there!
 * the code itself is tested, we want coverage etc.

* is there an effort to document what hostkeys files are etc.?

continuous integration: using Jenkins (=Hudson, forked away from Oracle)
 * easier to configure than buildbot
 * support for JUnit out-of-the-box
 * support for cobertura via plugin

build system: still maintaining bash scripts, trying out gradle
 * faster builds, build scripts far easier to read/write
 * no integration with cobertura :(
 * gradle has excellent Ant integration => Coverage (bash wrapper not very usable)
 * can generate project files for eclipse/intellij

what's next?
 * some actual stuff built with gnunet-java?

* general question: when should an api use per-connection receive, and per-service-receive?

does this make sense / do we need it:
 * support in the scheduler for communicating asynchronously with other processes via stdin/stdout/stderr
  * currently only used in testing, uses blocking i/o

* stream is implemented as a library, not as a service
 * why?
 * should GNUnet-java also implement it?