File tree Expand file tree Collapse file tree 2 files changed +33
-4
lines changed
src/WebJobs.Script/Diagnostics
test/WebJobs.Script.Tests/Diagnostics Expand file tree Collapse file tree 2 files changed +33
-4
lines changed Original file line number Diff line number Diff line change 3
3
4
4
using System ;
5
5
using System . Collections . Generic ;
6
+ using System . Collections . ObjectModel ;
6
7
using System . Diagnostics ;
8
+ using System . Linq ;
7
9
using Microsoft . Azure . WebJobs . Host ;
8
10
9
11
namespace Microsoft . Azure . WebJobs . Script
10
12
{
11
- // TODO: The core WebJobs SDK also defines a CompositeTraceWriter, but that is internal.
12
- // We should consider exposing the core SDK CompositeTraceWriter and adopting that instead.
13
+ // This is a copy of the WebJobs SDK CompositeTraceWriter, but that is internal.
13
14
public class CompositeTraceWriter : TraceWriter , IDisposable
14
15
{
15
- private readonly IEnumerable < TraceWriter > _innerTraceWriters ;
16
+ private readonly ReadOnlyCollection < TraceWriter > _innerTraceWriters ;
16
17
private bool _disposed = false ;
17
18
18
19
public CompositeTraceWriter ( IEnumerable < TraceWriter > traceWriters , TraceLevel level = TraceLevel . Verbose )
19
20
: base ( level )
20
21
{
21
- _innerTraceWriters = traceWriters ?? throw new ArgumentNullException ( "traceWriters" ) ;
22
+ if ( traceWriters == null )
23
+ {
24
+ throw new ArgumentNullException ( "traceWriters" ) ;
25
+ }
26
+
27
+ // create a copy of the collection to ensure it isn't modified
28
+ _innerTraceWriters = traceWriters . ToList ( ) . AsReadOnly ( ) ;
22
29
}
23
30
24
31
public override void Trace ( TraceEvent traceEvent )
Original file line number Diff line number Diff line change 2
2
// Licensed under the MIT License. See License.txt in the project root for license information.
3
3
4
4
using System ;
5
+ using System . Collections . Generic ;
5
6
using System . Diagnostics ;
6
7
using System . Linq ;
7
8
using Microsoft . Azure . WebJobs . Host ;
@@ -58,6 +59,27 @@ public void Flush_FlushesInternalWriters()
58
59
Assert . True ( traceWriter . Flushed ) ;
59
60
}
60
61
62
+ [ Fact ]
63
+ public void Constructor_CreatesCopyOfCollection ( )
64
+ {
65
+ var t1 = new TestTraceWriter ( TraceLevel . Verbose ) ;
66
+ var t2 = new TestTraceWriter ( TraceLevel . Verbose ) ;
67
+ List < TraceWriter > traceWriters = new List < TraceWriter > { t1 , t2 } ;
68
+ var traceWriter = new CompositeTraceWriter ( traceWriters ) ;
69
+
70
+ traceWriter . Info ( "Test" ) ;
71
+ Assert . Equal ( 1 , t1 . GetTraces ( ) . Count ) ;
72
+ Assert . Equal ( 1 , t2 . GetTraces ( ) . Count ) ;
73
+
74
+ var t3 = new TestTraceWriter ( TraceLevel . Verbose ) ;
75
+ traceWriters . Add ( t3 ) ;
76
+
77
+ traceWriter . Info ( "Test" ) ;
78
+ Assert . Equal ( 2 , t1 . GetTraces ( ) . Count ) ;
79
+ Assert . Equal ( 2 , t2 . GetTraces ( ) . Count ) ;
80
+ Assert . Equal ( 0 , t3 . GetTraces ( ) . Count ) ;
81
+ }
82
+
61
83
[ Fact ]
62
84
public void Dispose_Disposes_If_IDisposable ( )
63
85
{
You can’t perform that action at this time.
0 commit comments