11// Copyright (c) Microsoft Corporation. All rights reserved.
22// Licensed under the MIT License.
33
4+ using System ;
45using System . Collections . Generic ;
6+ using System . Globalization ;
57using System . Linq ;
68using System . Threading . Tasks ;
79using Azure . Core . TestFramework ;
@@ -21,7 +23,7 @@ public LogsQueryClientClientLiveTests(bool isAsync) : base(isAsync)
2123 [ SetUp ]
2224 public async Task SetUp ( )
2325 {
24- _logsTestData = new LogsTestData ( TestEnvironment ) ;
26+ _logsTestData = new LogsTestData ( this ) ;
2527 await _logsTestData . InitializeAsync ( ) ;
2628 }
2729
@@ -39,7 +41,7 @@ public async Task CanQuery()
3941 var client = CreateClient ( ) ;
4042
4143 var results = await client . QueryAsync ( TestEnvironment . WorkspaceId ,
42- $ "{ LogsTestData . TableAName } |" +
44+ $ "{ _logsTestData . TableAName } |" +
4345 $ "project { LogsTestData . StringColumnName } , { LogsTestData . IntColumnName } , { LogsTestData . BoolColumnName } , { LogsTestData . FloatColumnName } |" +
4446 $ "order by { LogsTestData . StringColumnName } asc") ;
4547
@@ -65,7 +67,7 @@ public async Task CanQueryIntoPrimitiveString()
6567 var client = CreateClient ( ) ;
6668
6769 var results = await client . QueryAsync < string > ( TestEnvironment . WorkspaceId ,
68- $ "{ LogsTestData . TableAName } | project { LogsTestData . StringColumnName } | order by { LogsTestData . StringColumnName } asc") ;
70+ $ "{ _logsTestData . TableAName } | project { LogsTestData . StringColumnName } | order by { LogsTestData . StringColumnName } asc") ;
6971
7072 CollectionAssert . AreEqual ( new [ ] { "a" , "b" , "c" } , results . Value ) ;
7173 }
@@ -75,9 +77,9 @@ public async Task CanQueryIntoPrimitiveInt()
7577 {
7678 var client = CreateClient ( ) ;
7779
78- var results = await client . QueryAsync < int > ( TestEnvironment . WorkspaceId , $ "{ LogsTestData . TableAName } | count") ;
80+ var results = await client . QueryAsync < int > ( TestEnvironment . WorkspaceId , $ "{ _logsTestData . TableAName } | count") ;
7981
80- Assert . AreEqual ( LogsTestData . TableA . Count , results . Value [ 0 ] ) ;
82+ Assert . AreEqual ( _logsTestData . TableA . Count , results . Value [ 0 ] ) ;
8183 }
8284
8385 [ RecordedTest ]
@@ -86,7 +88,7 @@ public async Task CanQueryIntoClass()
8688 var client = CreateClient ( ) ;
8789
8890 var results = await client . QueryAsync < TestModel > ( TestEnvironment . WorkspaceId ,
89- $ "{ LogsTestData . TableAName } |" +
91+ $ "{ _logsTestData . TableAName } |" +
9092 $ "project-rename Name = { LogsTestData . StringColumnName } , Age = { LogsTestData . IntColumnName } |" +
9193 $ "order by Name asc") ;
9294
@@ -104,7 +106,7 @@ public async Task CanQueryIntoDictionary()
104106 var client = CreateClient ( ) ;
105107
106108 var results = await client . QueryAsync < Dictionary < string , object > > ( TestEnvironment . WorkspaceId ,
107- $ "{ LogsTestData . TableAName } |" +
109+ $ "{ _logsTestData . TableAName } |" +
108110 $ "project-rename Name = { LogsTestData . StringColumnName } , Age = { LogsTestData . IntColumnName } |" +
109111 $ "project Name, Age |" +
110112 $ "order by Name asc") ;
@@ -123,7 +125,7 @@ public async Task CanQueryIntoIDictionary()
123125 var client = CreateClient ( ) ;
124126
125127 var results = await client . QueryAsync < IDictionary < string , object > > ( TestEnvironment . WorkspaceId ,
126- $ "{ LogsTestData . TableAName } |" +
128+ $ "{ _logsTestData . TableAName } |" +
127129 $ "project-rename Name = { LogsTestData . StringColumnName } , Age = { LogsTestData . IntColumnName } |" +
128130 $ "project Name, Age |" +
129131 $ "order by Name asc") ;
@@ -152,6 +154,51 @@ public async Task CanQueryBatch()
152154 CollectionAssert . IsNotEmpty ( result2 . Tables [ 0 ] . Columns ) ;
153155 }
154156
157+ [ RecordedTest ]
158+ public async Task CanQueryWithTimespan ( )
159+ {
160+ // Get the time of the second event and add a bit of buffer to it (events are 2d apart)
161+ var minOffset = ( DateTimeOffset ) _logsTestData . TableA [ 1 ] [ LogsTestData . TimeGeneratedColumnNameSent ] ;
162+ var timespan = Recording . UtcNow - minOffset ;
163+ timespan = timespan . Add ( TimeSpan . FromDays ( 1 ) ) ;
164+
165+ var client = CreateClient ( ) ;
166+ var results = await client . QueryAsync < string > (
167+ TestEnvironment . WorkspaceId ,
168+ $ "{ _logsTestData . TableAName } | project { LogsTestData . TimeGeneratedColumnName } ",
169+ timespan ) ;
170+
171+ // We should get the second and the third events
172+ Assert . AreEqual ( 2 , results . Value . Count ) ;
173+ // TODO: Switch to querying DateTimeOffset
174+ Assert . True ( results . Value . All ( r => DateTimeOffset . Parse ( r , null , DateTimeStyles . AssumeUniversal ) >= minOffset ) ) ;
175+ }
176+
177+ [ RecordedTest ]
178+ public async Task CanQueryBatchWithTimespan ( )
179+ {
180+ // Get the time of the second event and add a bit of buffer to it (events are 2d apart)
181+ var minOffset = ( DateTimeOffset ) _logsTestData . TableA [ 1 ] [ LogsTestData . TimeGeneratedColumnNameSent ] ;
182+ var timespan = Recording . UtcNow - minOffset ;
183+ timespan = timespan . Add ( TimeSpan . FromDays ( 1 ) ) ;
184+
185+ var client = CreateClient ( ) ;
186+ LogsBatchQuery batch = InstrumentClient ( client . CreateBatchQuery ( ) ) ;
187+ string id1 = batch . AddQuery ( TestEnvironment . WorkspaceId , $ "{ _logsTestData . TableAName } | project { LogsTestData . TimeGeneratedColumnName } ") ;
188+ string id2 = batch . AddQuery ( TestEnvironment . WorkspaceId , $ "{ _logsTestData . TableAName } | project { LogsTestData . TimeGeneratedColumnName } ", timespan ) ;
189+ Response < LogsBatchQueryResult > response = await batch . SubmitAsync ( ) ;
190+
191+ var result1 = response . Value . GetResult < string > ( id1 ) ;
192+ var result2 = response . Value . GetResult < string > ( id2 ) ;
193+
194+ // All rows
195+ Assert . AreEqual ( 3 , result1 . Count ) ;
196+ // Filtered by the timestamp
197+ Assert . AreEqual ( 2 , result2 . Count ) ;
198+ // TODO: Switch to querying DateTimeOffset
199+ Assert . True ( result2 . All ( r => DateTimeOffset . Parse ( r , null , DateTimeStyles . AssumeUniversal ) >= minOffset ) ) ;
200+ }
201+
155202 private record TestModel
156203 {
157204 public string Name { get ; set ; }
0 commit comments