These are chat archives for akkadotnet/akka.net

16th
Jul 2016
Aaron Stannard
@Aaronontheweb
Jul 16 2016 08:44
@fouimette the Config namespaces for each module have reference files built into them
check out the source
Arsene Tochemey GANDOTE
@Tochemey
Jul 16 2016 09:50
Hello how do I use EventFilter to test dead letters?
Arsene Tochemey GANDOTE
@Tochemey
Jul 16 2016 11:16
Hello How can I test the Event Bus pub/sub feature?
Bartosz Sypytkowski
@Horusiath
Jul 16 2016 12:29
@Tochemey you can subscribe test actor or probe to event bus and verify it after publishing an event
Arsene Tochemey GANDOTE
@Tochemey
Jul 16 2016 14:50

@Horusiath I am doing some test of an Actor that supposes to write into file upon receiving every event. The actor subscribes to the type of event to receive. However when I published N number of events to the event bus the actor only act on the first event by writing it into the file. The others are kind of ignored. This is the test code

            ActorSystemRefs.ActorSystem = Sys;
            var actorSystem = ActorSystemRefs.ActorSystem;

            var loggingActor =
                actorSystem.ActorOf(Props.Create(() => new FileLoggerActor()));
            actorSystem.EventStream.Subscribe(loggingActor, typeof (AuditLog));
            actorSystem.EventStream.Subscribe(TestActor, typeof(Acknowleged));

            Within(TimeSpan.FromSeconds(timeout),
                () =>
                {
                    actorSystem.EventStream.Publish(new AuditLog(GuidFactory.Create().ToString(), DateTime.UtcNow, "me", "0000", "debit1", "mobile"));
                    actorSystem.EventStream.Publish(new AuditLog(GuidFactory.Create().ToString(), DateTime.UtcNow, "me", "0000", "debit2", "mobile"));
                    actorSystem.EventStream.Publish(new AuditLog(GuidFactory.Create().ToString(), DateTime.UtcNow, "me", "0000", "debit3", "mobile"));
                    var result = ExpectMsgAllOf<Acknowleged>();

                    Assert.NotNull(result);
                });

and this is the Actor:

    public class FileLoggerActor : ReceiveActor
    {
        private static string _filePath;


        public FileLoggerActor()
        {
            Ready();
        }

        public override void AroundPreStart()
        {
            ReadConfiguration();
        }

        public sealed override void Ready()
        {
            Receive<AuditLog>(log =>
            {
                WriteToFile(log);
                // This code is for testing purpose
                ActorSystemRefs.PushEvent(new Acknowleged(log));
            });
        }

        private static void ReadConfiguration()
        {
            _filePath = ConfigurationManager.AppSettings["FileLogger.FilePath"];
            if (_filePath == null)
            {
                throw new ConfigurationErrorsException(
                    "Configuration appSetting FileLogger.FilePath not" +
                    "found for FileLogger actor.");
            }

            // If audit trail file path is a relative file path, 
            // convert it to an absolute path.
            _filePath = _filePath.Replace("~", AppDomain.CurrentDomain.BaseDirectory);
        }

        private static void WriteToFile(AuditLog log)
        {
            var jsonString = JsonConvert.SerializeObject(log, Formatting.None);
            File.AppendAllText(_filePath, jsonString + Environment.NewLine);
        }
    }
Arjen Smits
@Danthar
Jul 16 2016 15:27
@Tochemey what if you pass the TestProbe as an dependency in your FileLoggerActor constructor, and use that reference? Instead of your 'ActorSystemRefs.PushEvent'
voltcode
@voltcode
Jul 16 2016 15:29
Fxfsl
voltcode
@voltcode
Jul 16 2016 15:42
Oops mobile, soz
Bartosz Sypytkowski
@Horusiath
Jul 16 2016 16:22
@Tochemey what about this?:
actorSystem.EventStream.Publish(new AuditLog(GuidFactory.Create().ToString(), DateTime.UtcNow, "me", "0000", "debit1", "mobile"));
ExpectMsg<Acknowleged>(x=> x.Property == "debit1");
actorSystem.EventStream.Publish(new AuditLog(GuidFactory.Create().ToString(), DateTime.UtcNow, "me", "0000", "debit2", "mobile"));
ExpectMsg<Acknowleged>(x=> x.Property == "debit2");
actorSystem.EventStream.Publish(new AuditLog(GuidFactory.Create().ToString(), DateTime.UtcNow, "me", "0000", "debit3", "mobile"));
ExpectMsg<Acknowleged>(x=> x.Property == "debit3");
or even:
actorSystem.EventStream.Publish(new AuditLog(GuidFactory.Create().ToString(), DateTime.UtcNow, "me", "0000", "debit1", "mobile"));
actorSystem.EventStream.Publish(new AuditLog(GuidFactory.Create().ToString(), DateTime.UtcNow, "me", "0000", "debit2", "mobile"));
actorSystem.EventStream.Publish(new AuditLog(GuidFactory.Create().ToString(), DateTime.UtcNow, "me", "0000", "debit3", "mobile"));
ExpectMsg<Acknowleged>(x=> x.Property == "debit1");
ExpectMsg<Acknowleged>(x=> x.Property == "debit2");
ExpectMsg<Acknowleged>(x=> x.Property == "debit3");
Garrard Kitchen
@garrardkitchen
Jul 16 2016 17:08
Hi @Aaronontheweb, I took a punt at upgrading projects to 1.1.1 but experiencing same error with mono. Works fine on windows but not on the mac and here comes a bigger BUT….but, I’ve just realised I'm not actually comparing apples with apples here and I’m sure this will be relevant!…In win env I’m using .net but it’s only the mac I’m using mono.