@@ -42,8 +42,8 @@ public void ConfigureOptions_AppliesValuesCorrectly()
4242 Assert . AreEqual ( 5 , options . BatchCheckpointFrequency ) ;
4343 Assert . AreEqual ( 31 , options . EventProcessorOptions . PartitionOwnershipExpirationInterval . TotalSeconds ) ;
4444 Assert . AreEqual ( 21 , options . EventProcessorOptions . LoadBalancingUpdateInterval . TotalSeconds ) ;
45- Assert . AreEqual ( "FromEnqueuedTime" , options . InitialOffsetOptions . Type ) ;
46- Assert . AreEqual ( "2020-09-13T12: 00Z" , options . InitialOffsetOptions . EnqueuedTimeUTC ) ;
45+ Assert . AreEqual ( "FromEnqueuedTime" , options . InitialOffsetOptions . Type . ToString ( ) ) ;
46+ Assert . AreEqual ( "2020-09-13 12:00: 00Z" , options . InitialOffsetOptions . EnqueuedTimeUtc . Value . ToString ( "u" ) ) ;
4747 Assert . AreEqual ( 5 , options . ClientRetryOptions . MaximumRetries ) ;
4848 Assert . AreEqual ( TimeSpan . FromSeconds ( 1 ) , options . ClientRetryOptions . Delay ) ;
4949 Assert . AreEqual ( TimeSpan . FromMinutes ( 1 ) , options . ClientRetryOptions . MaximumDelay ) ;
@@ -57,7 +57,7 @@ public void ConfigureOptions_Format_Returns_Expected()
5757 {
5858 EventHubOptions options = CreateOptionsFromConfig ( ) ;
5959
60- string format = ( ( IOptionsFormatter ) options ) . Format ( ) ;
60+ string format = ( ( IOptionsFormatter ) options ) . Format ( ) ;
6161 JObject iObj = JObject . Parse ( format ) ;
6262 EventHubOptions result = iObj . ToObject < EventHubOptions > ( ) ;
6363
@@ -67,8 +67,8 @@ public void ConfigureOptions_Format_Returns_Expected()
6767 Assert . AreEqual ( 123 , result . PrefetchCount ) ;
6868 Assert . AreEqual ( TimeSpan . FromSeconds ( 31 ) , result . PartitionOwnershipExpirationInterval ) ;
6969 Assert . AreEqual ( TimeSpan . FromSeconds ( 21 ) , result . LoadBalancingUpdateInterval ) ;
70- Assert . AreEqual ( "FromEnqueuedTime" , result . InitialOffsetOptions . Type ) ;
71- Assert . AreEqual ( "2020-09-13T12: 00Z" , result . InitialOffsetOptions . EnqueuedTimeUTC ) ;
70+ Assert . AreEqual ( "FromEnqueuedTime" , result . InitialOffsetOptions . Type . ToString ( ) ) ;
71+ Assert . AreEqual ( "2020-09-13 12:00: 00Z" , result . InitialOffsetOptions . EnqueuedTimeUtc . Value . ToString ( "u" ) ) ;
7272 Assert . AreEqual ( 5 , result . ClientRetryOptions . MaximumRetries ) ;
7373 Assert . AreEqual ( TimeSpan . FromSeconds ( 1 ) , result . ClientRetryOptions . Delay ) ;
7474 Assert . AreEqual ( TimeSpan . FromMinutes ( 1 ) , result . ClientRetryOptions . MaximumDelay ) ;
@@ -88,16 +88,16 @@ public void ConfigureOptions_AppliesValuesCorrectly_BackCompat()
8888 Assert . AreEqual ( 5 , options . BatchCheckpointFrequency ) ;
8989 Assert . AreEqual ( 31 , options . EventProcessorOptions . PartitionOwnershipExpirationInterval . TotalSeconds ) ;
9090 Assert . AreEqual ( 21 , options . EventProcessorOptions . LoadBalancingUpdateInterval . TotalSeconds ) ;
91- Assert . AreEqual ( "FromEnqueuedTime" , options . InitialOffsetOptions . Type ) ;
92- Assert . AreEqual ( "2020-09-13T12: 00Z" , options . InitialOffsetOptions . EnqueuedTimeUTC ) ;
91+ Assert . AreEqual ( "FromEnqueuedTime" , options . InitialOffsetOptions . Type . ToString ( ) ) ;
92+ Assert . AreEqual ( "2020-09-13 12:00: 00Z" , options . InitialOffsetOptions . EnqueuedTimeUtc . Value . ToString ( "u" ) ) ;
9393 }
9494
9595 [ Test ]
9696 public void ConfigureOptions_Format_Returns_Expected_BackCompat ( )
9797 {
9898 EventHubOptions options = CreateOptionsFromConfigBackCompat ( ) ;
9999
100- string format = ( ( IOptionsFormatter ) options ) . Format ( ) ;
100+ string format = ( ( IOptionsFormatter ) options ) . Format ( ) ;
101101 JObject iObj = JObject . Parse ( format ) ;
102102 EventHubOptions result = iObj . ToObject < EventHubOptions > ( ) ;
103103
@@ -107,8 +107,45 @@ public void ConfigureOptions_Format_Returns_Expected_BackCompat()
107107 Assert . AreEqual ( 123 , result . PrefetchCount ) ;
108108 Assert . AreEqual ( TimeSpan . FromSeconds ( 31 ) , result . PartitionOwnershipExpirationInterval ) ;
109109 Assert . AreEqual ( TimeSpan . FromSeconds ( 21 ) , result . LoadBalancingUpdateInterval ) ;
110- Assert . AreEqual ( "FromEnqueuedTime" , result . InitialOffsetOptions . Type ) ;
111- Assert . AreEqual ( "2020-09-13T12:00Z" , result . InitialOffsetOptions . EnqueuedTimeUTC ) ;
110+ Assert . AreEqual ( "FromEnqueuedTime" , result . InitialOffsetOptions . Type . ToString ( ) ) ;
111+ Assert . AreEqual ( "2020-09-13 12:00:00Z" , result . InitialOffsetOptions . EnqueuedTimeUtc . Value . ToString ( "u" ) ) ;
112+ }
113+
114+ [ Test ]
115+ [ TestCase ( "fromstart" , OffsetType . FromStart ) ]
116+ [ TestCase ( "FromStart" , OffsetType . FromStart ) ]
117+ [ TestCase ( "fromend" , OffsetType . FromEnd ) ]
118+ [ TestCase ( "FromEnd" , OffsetType . FromEnd ) ]
119+ public void CanParseInitialOffsetFromConfig ( string offsetType , OffsetType typeEnum )
120+ {
121+ string extensionPath = "AzureWebJobs:Extensions:EventHubs" ;
122+ var options = TestHelpers . GetConfiguredOptions < EventHubOptions > (
123+ b =>
124+ {
125+ b . AddEventHubs ( ) ;
126+ } ,
127+ new Dictionary < string , string > { { $ "{ extensionPath } :InitialOffsetOptions:Type", offsetType } } ) ;
128+ Assert . AreEqual ( typeEnum , options . InitialOffsetOptions . Type ) ;
129+ }
130+
131+ [ Test ]
132+ [ TestCase ( "fromEnqueuedTime" , "2020-09-13T12:00Z" ) ]
133+ [ TestCase ( "fromenqueuedtime" , "2020-09-13 12:00:00Z" ) ]
134+ public void CanParseInitialOffsetFromConfig_EnqueuedTime ( string offsetType , string enqueuedTime )
135+ {
136+ string extensionPath = "AzureWebJobs:Extensions:EventHubs" ;
137+ var options = TestHelpers . GetConfiguredOptions < EventHubOptions > (
138+ b =>
139+ {
140+ b . AddEventHubs ( ) ;
141+ } ,
142+ new Dictionary < string , string >
143+ {
144+ { $ "{ extensionPath } :InitialOffsetOptions:Type", offsetType } ,
145+ { $ "{ extensionPath } :InitialOffsetOptions:EnqueuedTimeUtc", enqueuedTime } ,
146+ } ) ;
147+ Assert . AreEqual ( OffsetType . FromEnqueuedTime , options . InitialOffsetOptions . Type ) ;
148+ Assert . AreEqual ( DateTimeOffset . Parse ( enqueuedTime ) , options . InitialOffsetOptions . EnqueuedTimeUtc ) ;
112149 }
113150
114151 private EventHubOptions CreateOptionsFromConfig ( )
@@ -124,7 +161,7 @@ private EventHubOptions CreateOptionsFromConfig()
124161 { $ "{ extensionPath } :LoadBalancingUpdateInterval", "00:00:21" } ,
125162 { $ "{ extensionPath } :LoadBalancingStrategy", "0" } ,
126163 { $ "{ extensionPath } :InitialOffsetOptions:Type", "FromEnqueuedTime" } ,
127- { $ "{ extensionPath } :InitialOffsetOptions:EnqueuedTimeUTC", "2020-09-13T12 :00Z" } ,
164+ { $ "{ extensionPath } :InitialOffsetOptions:EnqueuedTimeUTC", "2020-09-13 12:00 :00Z" } ,
128165 { $ "{ extensionPath } :ClientRetryOptions:MaximumRetries", "5" } ,
129166 { $ "{ extensionPath } :ClientRetryOptions:Delay", "00:00:01" } ,
130167 { $ "{ extensionPath } :ClientRetryOptions:MaxDelay", "00:01:00" } ,
@@ -153,7 +190,7 @@ private EventHubOptions CreateOptionsFromConfigBackCompat()
153190 { $ "{ extensionPath } :PartitionManagerOptions:LeaseDuration", "00:00:31" } ,
154191 { $ "{ extensionPath } :PartitionManagerOptions:RenewInterval", "00:00:21" } ,
155192 { $ "{ extensionPath } :InitialOffsetOptions:Type", "FromEnqueuedTime" } ,
156- { $ "{ extensionPath } :InitialOffsetOptions:EnqueuedTimeUTC", "2020-09-13T12 :00Z" } ,
193+ { $ "{ extensionPath } :InitialOffsetOptions:EnqueuedTimeUTC", "2020-09-13 12:00 :00Z" } ,
157194 } ;
158195
159196 return TestHelpers . GetConfiguredOptions < EventHubOptions > ( b =>
0 commit comments