%description: Tests recording of submodule statistics (source= keys that contain signal names qualified with submodule paths) in @statistic() properties. Check that listener is added to the submodule, not to the module of the @statistic property. %file: test.ned module App { } module UDP { } module Host { parameters: @statistic[appSent](source=app.sentPk; record=count); @statistic[appSentx2](source=2*app.sentPk; record=count); @statistic[appTotal](source=app.sentPk + app.rcvdPk; record=count); submodules: app: App; udp: UDP; } network Test { parameters: @statistic[host1Sent](source=host1.udp.sentPk; record=count); @statistic[host1Sentx2](source=2*host1.udp.sentPk; record=count); @statistic[host1Total](source=host1.udp.sentPk + host1.udp.rcvdPk; record=count); submodules: host1: Host; host2: Host; } %inifile: test.ini [General] network = Test debug-statistics-recording = true %subst: /omnetpp::// %subst: /signalID=\d+/signalID=_/ %contains: stdout Setting up network "Test"... Test.host1.app (App): "rcvdPk" (signalID=_): IdentityFilter + (NaryExpressionFilter) CountRecorder ==> appTotal:count "sentPk" (signalID=_): CountRecorder ==> appSent:count 2 * (UnaryExpressionFilter) CountRecorder ==> appSentx2:count IdentityFilter + (NaryExpressionFilter) CountRecorder ==> appTotal:count Test.host1.udp (UDP): "rcvdPk" (signalID=_): IdentityFilter + (NaryExpressionFilter) CountRecorder ==> host1Total:count "sentPk" (signalID=_): CountRecorder ==> host1Sent:count 2 * (UnaryExpressionFilter) CountRecorder ==> host1Sentx2:count IdentityFilter + (NaryExpressionFilter) CountRecorder ==> host1Total:count Test.host2.app (App): "rcvdPk" (signalID=_): IdentityFilter + (NaryExpressionFilter) CountRecorder ==> appTotal:count "sentPk" (signalID=_): CountRecorder ==> appSent:count 2 * (UnaryExpressionFilter) CountRecorder ==> appSentx2:count IdentityFilter + (NaryExpressionFilter) CountRecorder ==> appTotal:count Initializing...