public QueryTemperatureResponse(CorrelationId correlationID, SensorIdentifier sensorId, double temperature, DateTime readingTime)
 {
     SensorId      = sensorId;
     CorrelationId = correlationID;
     Temperature   = temperature;
     ReadingTime   = readingTime;
 }
예제 #2
0
        public void AfterAllTemperaturesRecordedShouldRespondWithResult()
        {
            var temperatureSource = CreateTestProbe("TemperatureSource");
            var replyTo           = CreateTestProbe("ReplyTo");
            var evaluate          = CreateEvaluate(temperatureSource, replyTo);

            SensorIdentifier id1 = new SensorIdentifier(1);
            SensorIdentifier id2 = new SensorIdentifier(2);

            var sensor1 = CreateTestProbe("sensor1");
            var sensor2 = CreateTestProbe("sensor2");
            var sensors = new Dictionary <SensorIdentifier, IActorRef> {
                { id1, sensor1 },
                { id2, sensor2 }
            };

            evaluate.Tell(new GetAllSensorsResponse(new CorrelationId(), sensors.ToImmutableDictionary()));
            evaluate.Tell(new QueryTemperatureResponse(new CorrelationId(), id1, 100, DateTime.Now));
            evaluate.Tell(new QueryTemperatureResponse(new CorrelationId(), id2, 100, DateTime.Now));

            var received = replyTo.ExpectMsg <SafetyEvaluationResult>();

            received.RequiresNotification.Should().BeFalse();
            received.Message.Should().BeEmpty();
        }
예제 #3
0
        public void WhenTemperatureGreaterThan200ShouldRespondWithResult()
        {
            var temperatureSource = CreateTestProbe("TemperatureSource");
            var replyTo           = CreateTestProbe("ReplyTo");
            var evaluate          = CreateEvaluate(temperatureSource, replyTo);

            SensorIdentifier id1 = new SensorIdentifier(1);
            SensorIdentifier id2 = new SensorIdentifier(2);

            var sensor1 = CreateTestProbe("sensor1");
            var sensor2 = CreateTestProbe("sensor2");
            var sensors = new Dictionary <SensorIdentifier, IActorRef> {
                { id1, sensor1 },
                { id2, sensor2 }
            };

            evaluate.Tell(new GetAllSensorsResponse(new CorrelationId(), sensors.ToImmutableDictionary()));
            evaluate.Tell(new QueryTemperatureResponse(new CorrelationId(), id1, 250, DateTime.Now));
            evaluate.Tell(new QueryTemperatureResponse(new CorrelationId(), id2, 100, DateTime.Now));

            var received = replyTo.ExpectMsg <SafetyEvaluationResult>();

            received.RequiresNotification.Should().BeTrue();
            received.Message.Should().Be("Temperature exceeds 200 degrees");
            received.Temperatures.Should().HaveCount(2);
            received.Temperatures[id1].Value.Should().Be(250);
            received.Temperatures[id2].Value.Should().Be(100);
        }
        private IActorRef CreateTestSensor(SensorIdentifier sensorIdentifier = null)
        {
            if (sensorIdentifier is null)
            {
                sensorIdentifier = new SensorIdentifier(1);
            }

            return(Sys.ActorOf(TemperatureSensorActor.Props(sensorIdentifier)));
        }
예제 #5
0
        protected IActorRef AddSensorToArea(IActorRef area, SensorIdentifier sensorId)
        {
            var probe = CreateTestProbe();

            area.Tell(new AddSensorRequest(new CorrelationId(), sensorId), probe);
            IActorRef addedSensor = null;

            probe.ExpectMsg <AddSensorResponse>(response => addedSensor = response.TemperatureSensor);
            return(addedSensor);
        }
예제 #6
0
        ShortSensor ISdrnsController.GetShortSensor(SensorIdentifier sensorId, CommonOperationArguments otherArgs)
        {
            var result =
                Operation <SdrnsControllerAppService.GetShortSensorAppOperation, ShortSensor>()
                .Invoke(
                    new GetShortSensorAppOperationOptions
            {
                SensorId  = sensorId,
                OtherArgs = otherArgs
            },
                    this.OperationContext
                    );

            return(result);
        }
        public void ShouldSubscribeToChanges()
        {
            var probe = CreateTestProbe();

            SensorIdentifier expectedIdentifier = new SensorIdentifier(23);
            var sensor = CreateTestSensor(expectedIdentifier);

            CorrelationId expectedCorrelationId = new CorrelationId();

            sensor.Tell(new SubscribeToUpdatesRequest(expectedCorrelationId), probe.Ref);

            var received = probe.ExpectMsg <SubscribeToUpdatesResponse>();

            received.CorrelationId.Should().Be(expectedCorrelationId);
        }
        public void ShouldAddNewSensorWhenNotPreviouslyAdded()
        {
            var probe = CreateTestProbe();
            var area  = CreateTestArea("North");

            CorrelationId    correlationId = new CorrelationId();
            SensorIdentifier sensorId      = new SensorIdentifier(2);

            area.Tell(new AddSensorRequest(correlationId, sensorId), probe.Ref);

            var received = probe.ExpectMsg <AddSensorResponse>();

            received.CorrelationId.Should().Be(correlationId);
            received.TemperatureSensor.Should().NotBeNull();
        }
        public void ShouldReturnExistingSensorWhenPreviouslyAdded()
        {
            var probe = CreateTestProbe();
            var area  = CreateTestArea("North");

            SensorIdentifier sensorId = new SensorIdentifier(2);

            area.Tell(new AddSensorRequest(new CorrelationId(), sensorId), probe.Ref);

            var       received = probe.ExpectMsg <AddSensorResponse>();
            IActorRef sensor   = received.TemperatureSensor;

            area.Tell(new AddSensorRequest(new CorrelationId(), sensorId), probe.Ref);
            received = probe.ExpectMsg <AddSensorResponse>();
            received.TemperatureSensor.Should().Be(sensor);
        }
        public void ShouldQueryIdentification()
        {
            var probe = CreateTestProbe();

            SensorIdentifier expectedIdentifier = new SensorIdentifier(23);
            var sensor = CreateTestSensor(expectedIdentifier);

            CorrelationId expectedCorrelationId = new CorrelationId();

            sensor.Tell(new SensorIdentificationRequest(expectedCorrelationId), probe.Ref);

            var received = probe.ExpectMsg <SensorIdentificationResponse>();

            received.CorrelationId.Should().Be(expectedCorrelationId);
            received.SensorIdentifier.Should().Be(expectedIdentifier);
        }
        public void AfterSubscriptionShouldReceiveUpdates()
        {
            var probe = CreateTestProbe();

            SensorIdentifier expectedIdentifier = new SensorIdentifier(1234);
            var sensor = CreateTestSensor(expectedIdentifier);

            double   expectedTemperature = 100.2;
            DateTime expectedReadingTime = DateTime.Now;

            sensor.Tell(new SubscribeToUpdatesRequest(new CorrelationId()), probe);
            probe.ExpectMsg <SubscribeToUpdatesResponse>();

            sensor.Tell(new UpdateTemperatureRequest(new CorrelationId(), expectedTemperature, expectedReadingTime));

            var received = probe.ExpectMsg <TemperatureUpdated>();

            received.SensorId.Should().Be(expectedIdentifier);
            received.Temperature.Should().Be(expectedTemperature);
            received.ReadingTime.Should().Be(expectedReadingTime);
        }
        public void ShouldQueryTemperature()
        {
            var probe = CreateTestProbe();

            SensorIdentifier expectedIdentifier = new SensorIdentifier(23);
            var sensor = CreateTestSensor(expectedIdentifier);

            CorrelationId expectedCorrelationId = new CorrelationId();
            double        expectedTemperature   = 98.4;
            DateTime      expectedReadingTime   = DateTime.Now;

            sensor.Tell(new UpdateTemperatureRequest(new CorrelationId(), expectedTemperature, expectedReadingTime));
            sensor.Tell(new QueryTemperatureRequest(expectedCorrelationId), probe.Ref);

            var received = probe.ExpectMsg <QueryTemperatureResponse>();

            received.CorrelationId.Should().Be(expectedCorrelationId);
            received.SensorId.Should().Be(expectedIdentifier);
            received.Temperature.Should().Be(98.4);
            received.ReadingTime.Should().Be(expectedReadingTime);
        }
        public void AfterSubscriptionShouldReceiveTemperatureUpdates()
        {
            var probe = CreateTestProbe();
            var area  = CreateTestArea("North");

            SensorIdentifier sensorId = new SensorIdentifier(2);

            area.Tell(new AddSensorRequest(new CorrelationId(), sensorId), probe.Ref);
            IActorRef sensor = probe.ExpectMsg <AddSensorResponse>().TemperatureSensor;

            area.Tell(new SubscribeToUpdatesRequest(new CorrelationId()), probe.Ref);
            probe.ExpectMsg <SubscribeToUpdatesResponse>();

            double   expectedTemperature = 98.4;
            DateTime expectedReadingTime = DateTime.Now;

            sensor.Tell(new UpdateTemperatureRequest(new CorrelationId(), expectedTemperature, expectedReadingTime));

            var received = probe.ExpectMsg <TemperatureUpdated>();

            received.SensorId.Should().Be(sensorId);
            received.Temperature.Should().Be(expectedTemperature);
            received.ReadingTime.Should().Be(expectedReadingTime);
        }
 public SensorIdentificationResponse(CorrelationId correlationId, SensorIdentifier sensorIdentifier)
 {
     CorrelationId    = correlationId;
     SensorIdentifier = sensorIdentifier;
 }
예제 #15
0
 public static Props Props(SensorIdentifier id) =>
 Akka.Actor.Props.Create(() => new TemperatureSensorActor(id));
 public AddSensorRequest(CorrelationId correlationId, SensorIdentifier sensorId)
 {
     CorrelationId = correlationId;
     SensorId      = sensorId;
 }
 public TemperatureUpdated(SensorIdentifier sensorId, double temperature, DateTime readingTime)
 {
     SensorId    = sensorId;
     Temperature = temperature;
     ReadingTime = readingTime;
 }
예제 #18
0
 public TemperatureSensorActor(SensorIdentifier id)
 {
     _id          = id;
     _subscribers = new HashSet <IActorRef>();
 }