This is an automated email from the ASF dual-hosted git repository.

michaelpearce pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/activemq-nms-amqp.git


The following commit(s) were added to refs/heads/master by this push:
     new 62bcdb1  AMQNET-607: It should be possible to reset AbsoluteExpiryTime
     new b606b62  Merge pull request #22 from Havret/reset_absolute_expiry_time
62bcdb1 is described below

commit 62bcdb11c85e03f0ea6e12c58593591dde7d30c8
Author: Havret <[email protected]>
AuthorDate: Mon Aug 26 22:37:15 2019 +0200

    AMQNET-607: It should be possible to reset AbsoluteExpiryTime
---
 src/NMS.AMQP/Message/Facade/INmsMessageFacade.cs     |  2 +-
 src/NMS.AMQP/Message/NmsMessage.cs                   |  4 ++--
 src/NMS.AMQP/NmsSession.cs                           |  7 ++-----
 .../Provider/Amqp/Message/AmqpNmsMessageFacade.cs    | 20 +++++++++++---------
 .../Message/Facade/NmsTestMessageFacade.cs           |  2 +-
 .../Provider/Amqp/AmqpNmsMessageFacadeTest.cs        | 13 +++++++------
 6 files changed, 24 insertions(+), 24 deletions(-)

diff --git a/src/NMS.AMQP/Message/Facade/INmsMessageFacade.cs 
b/src/NMS.AMQP/Message/Facade/INmsMessageFacade.cs
index f610a6f..4b855ff 100644
--- a/src/NMS.AMQP/Message/Facade/INmsMessageFacade.cs
+++ b/src/NMS.AMQP/Message/Facade/INmsMessageFacade.cs
@@ -37,7 +37,7 @@ namespace Apache.NMS.AMQP.Message.Facade
         string NMSType { get; set; }
         string GroupId { get; set; }
         uint GroupSequence { get; set; }
-        DateTime Expiration { get; set; }
+        DateTime? Expiration { get; set; }
         sbyte JmsMsgType { get; }
         
         /// <summary>
diff --git a/src/NMS.AMQP/Message/NmsMessage.cs 
b/src/NMS.AMQP/Message/NmsMessage.cs
index c8cba84..16871ab 100644
--- a/src/NMS.AMQP/Message/NmsMessage.cs
+++ b/src/NMS.AMQP/Message/NmsMessage.cs
@@ -237,8 +237,8 @@ namespace Apache.NMS.AMQP.Message
 
         public bool IsExpired()
         {
-            DateTime expireTime = Facade.Expiration;
-            return expireTime > DateTime.MinValue && DateTime.UtcNow > 
expireTime;
+            DateTime? expireTime = Facade.Expiration;
+            return expireTime != null && DateTime.UtcNow > expireTime;
         }
 
         public virtual NmsMessage Copy()
diff --git a/src/NMS.AMQP/NmsSession.cs b/src/NMS.AMQP/NmsSession.cs
index e45062e..5843606 100644
--- a/src/NMS.AMQP/NmsSession.cs
+++ b/src/NMS.AMQP/NmsSession.cs
@@ -406,15 +406,12 @@ namespace Apache.NMS.AMQP
             if (isNmsMessage)
                 outbound = (NmsMessage) original;
             else
-            {
                 outbound = 
NmsMessageTransformation.TransformMessage(Connection.MessageFactory, original);
-            }
 
             if (hasTTL)
                 outbound.Facade.Expiration = timeStamp + timeToLive;
-            // TODO: Reset Expiration when 
https://github.com/Azure/amqpnetlite/commit/13009980e40aedcb6310f8fa796fbee53be8a389
 merged
-            // else
-            //     outbound.Facade.Expiration = DateTime.MinValue;
+            else
+                outbound.Facade.Expiration = null;
 
             outbound.OnSend(timeToLive);
 
diff --git a/src/NMS.AMQP/Provider/Amqp/Message/AmqpNmsMessageFacade.cs 
b/src/NMS.AMQP/Provider/Amqp/Message/AmqpNmsMessageFacade.cs
index 29ec18c..6766602 100644
--- a/src/NMS.AMQP/Provider/Amqp/Message/AmqpNmsMessageFacade.cs
+++ b/src/NMS.AMQP/Provider/Amqp/Message/AmqpNmsMessageFacade.cs
@@ -29,12 +29,14 @@ namespace Apache.NMS.AMQP.Provider.Amqp.Message
 {
     public class AmqpNmsMessageFacade : INmsMessageFacade
     {
+        private const int ABSOLUTE_EXPIRY_TIME_INDEX = 8;
+        
         private TimeSpan? amqpTimeToLiveOverride;
         private IDestination destination;
         private IDestination replyTo;
         private IDestination consumerDestination;
         private IAmqpConnection connection;
-        private DateTime syntheticExpiration;
+        private DateTime? syntheticExpiration;
         public global::Amqp.Message Message { get; private set; }
 
         public virtual bool HasBody()
@@ -206,19 +208,19 @@ namespace Apache.NMS.AMQP.Provider.Amqp.Message
             }
         }
 
-        public DateTime Expiration
+        public DateTime? Expiration
         {
-            get => Message.Properties?.AbsoluteExpiryTime ?? 
syntheticExpiration;
+            get => Message.Properties?.HasField(ABSOLUTE_EXPIRY_TIME_INDEX) == 
true ? Message.Properties.AbsoluteExpiryTime : syntheticExpiration;
             set
             {
-                if (value != default)
+                if (value != null)
                 {
                     LazyCreateProperties();
-                    Message.Properties.AbsoluteExpiryTime = value;
+                    Message.Properties.AbsoluteExpiryTime = value.Value;
                 }
-                else if (Message.Properties != null)
+                else
                 {
-                    Message.Properties.AbsoluteExpiryTime = default;
+                    Message.Properties?.ResetField(ABSOLUTE_EXPIRY_TIME_INDEX);
                 }
             }
         }
@@ -376,8 +378,8 @@ namespace Apache.NMS.AMQP.Provider.Amqp.Message
             InitializeHeader();
 
             TimeSpan ttl = NMSTimeToLive;
-            DateTime absoluteExpiryTime = Expiration;
-            if (absoluteExpiryTime == default && ttl != default)
+            DateTime? absoluteExpiryTime = Expiration;
+            if (absoluteExpiryTime == null && ttl != default)
             {
                 syntheticExpiration = DateTime.UtcNow + ttl;
             }
diff --git a/test/Apache-NMS-AMQP-Test/Message/Facade/NmsTestMessageFacade.cs 
b/test/Apache-NMS-AMQP-Test/Message/Facade/NmsTestMessageFacade.cs
index d7f3e09..b1d017d 100644
--- a/test/Apache-NMS-AMQP-Test/Message/Facade/NmsTestMessageFacade.cs
+++ b/test/Apache-NMS-AMQP-Test/Message/Facade/NmsTestMessageFacade.cs
@@ -74,7 +74,7 @@ namespace NMS.AMQP.Test.Message.Facade
         public string NMSType { get; set; }
         public string GroupId { get; set; }
         public uint GroupSequence { get; set; }
-        public DateTime Expiration { get; set; }
+        public DateTime? Expiration { get; set; }
         public sbyte JmsMsgType { get; }
         public bool IsPersistent { get; set; }
 
diff --git 
a/test/Apache-NMS-AMQP-Test/Provider/Amqp/AmqpNmsMessageFacadeTest.cs 
b/test/Apache-NMS-AMQP-Test/Provider/Amqp/AmqpNmsMessageFacadeTest.cs
index 0da7b33..658d352 100644
--- a/test/Apache-NMS-AMQP-Test/Provider/Amqp/AmqpNmsMessageFacadeTest.cs
+++ b/test/Apache-NMS-AMQP-Test/Provider/Amqp/AmqpNmsMessageFacadeTest.cs
@@ -1016,11 +1016,11 @@ namespace NMS.AMQP.Test.Provider.Amqp
 
         // --- absolute-expiry-time field  ---
         [Test]
-        public void TestGetExpirationIsZeroForNewMessage()
+        public void TestGetExpirationIsNullForNewMessage()
         {
             AmqpNmsMessageFacade amqpNmsMessageFacade = 
CreateNewMessageFacade();
 
-            Assert.AreEqual(default(DateTime), 
amqpNmsMessageFacade.Expiration);
+            Assert.IsNull(amqpNmsMessageFacade.Expiration);
         }
 
         [Test]
@@ -1049,17 +1049,18 @@ namespace NMS.AMQP.Test.Provider.Amqp
         }
 
         [Test]
-        public void TestSetExpirationZeroOnMessageWithExistingExpiryTime()
+        public void TestSetExpirationNullOnMessageWithExistingExpiryTime()
         {
             DateTime timestamp = DateTime.UtcNow;
 
             AmqpNmsMessageFacade amqpNmsMessageFacade = 
CreateNewMessageFacade();
 
             amqpNmsMessageFacade.Expiration = timestamp;
-            amqpNmsMessageFacade.Expiration = default;
+            amqpNmsMessageFacade.Expiration = null;
 
             Assert.AreEqual(default(DateTime), 
amqpNmsMessageFacade.Message.Properties.AbsoluteExpiryTime, "Expected 
absolute-expiry-time to be default");
-            Assert.AreEqual(default(DateTime), 
amqpNmsMessageFacade.Expiration, "Expected no expiration");
+            
Assert.IsFalse(amqpNmsMessageFacade.Message.Properties.HasField(8), "Expected 
absolute-expiry-time is not set");
+            Assert.AreEqual(null, amqpNmsMessageFacade.Expiration, "Expected 
no expiration");
         }
 
         // --- user-id field  ---
@@ -1352,7 +1353,7 @@ namespace NMS.AMQP.Test.Provider.Amqp
             Assert.AreEqual(source.IsPersistent, copy.IsPersistent);
             Assert.AreEqual(source.UserId, copy.UserId);
             Assert.AreEqual(source.NMSTimeToLive, copy.NMSTimeToLive);
-            Assert.IsTrue(Math.Abs((copy.Expiration - 
source.Expiration).TotalMilliseconds) < 1);
+            Assert.IsTrue(Math.Abs((copy.Expiration.Value - 
source.Expiration.Value).TotalMilliseconds) < 1);
             Assert.IsTrue(Math.Abs((copy.NMSTimestamp - 
source.NMSTimestamp).TotalMilliseconds) < 1);
             Assert.AreEqual(source.Properties.GetString("APP-Prop-1"), 
copy.Properties.GetString("APP-Prop-1"));
             Assert.AreEqual(source.GetMessageAnnotation("test-annotation"), 
copy.GetMessageAnnotation("test-annotation"));

Reply via email to