44[ assembly: CollectionBehavior ( DisableTestParallelization = true ) ]
55namespace Tests
66{
7- public class ParseArgsTests
7+ public class ParseArgsTests : IDisposable
88 {
9+ string _testDir ;
10+ public ParseArgsTests ( )
11+ {
12+ _testDir = Path . Combine ( Path . GetTempPath ( ) , "TestRoot" ) ;
13+ Directory . CreateDirectory ( _testDir ) ;
14+ }
15+
916 [ Fact ]
1017 public void TestValidArguments_Succeeds ( )
1118 {
1219 string period = "15" ;
13- string sourceFolder = Path . Combine ( Path . GetTempPath ( ) , "SourceFolder" ) ;
14- string destFolder = Path . Combine ( Path . GetTempPath ( ) , "BackupFolder" ) ;
15- string logFolder = Path . Combine ( Path . GetTempPath ( ) , "Logs" ) ;
20+ string sourceFolder = Path . Combine ( _testDir , "SourceFolder" ) ;
21+ string destFolder = Path . Combine ( _testDir , "BackupFolder" ) ;
22+ string logFolder = Path . Combine ( _testDir , "Logs" ) ;
1623 if ( ! Directory . Exists ( sourceFolder ) )
1724 Directory . CreateDirectory ( sourceFolder ) ;
1825 if ( ! Directory . Exists ( destFolder ) )
@@ -21,6 +28,7 @@ public void TestValidArguments_Succeeds()
2128 Directory . CreateDirectory ( logFolder ) ;
2229 Assert . True ( Directory . Exists ( sourceFolder ) ) ;
2330 Assert . True ( Directory . Exists ( destFolder ) ) ;
31+ Assert . True ( Directory . Exists ( logFolder ) ) ;
2432
2533 string [ ] args = new string [ ] { "--syncPeriod" , period , "--sourceFolder" , sourceFolder , "--destFolder" , destFolder , "--log" , logFolder } ;
2634 IConfiguration cmdArgs = new ConfigurationBuilder ( ) . AddCommandLine ( args ) . Build ( ) ;
@@ -30,20 +38,20 @@ public void TestValidArguments_Succeeds()
3038 Assert . Equal ( Int32 . Parse ( period ) , config . SyncPeriod ) ;
3139 Assert . Equal ( sourceFolder , config . SourceFolder ) ;
3240 Assert . Equal ( destFolder , config . BackupFolder ) ;
33- Assert . Equal ( Path . Combine ( logFolder , $ "SyncLog_ { DateTime . Now . ToString ( "dd-MM-yyyy" ) } . log") , config . LogFilePath ) ;
34-
35- Directory . Delete ( sourceFolder , true ) ;
36- Directory . Delete ( destFolder , true ) ;
37- Directory . Delete ( logFolder , true ) ;
41+ string [ ] logPathAbs = Directory . GetFiles ( logFolder , "*. log") ;
42+ Assert . Single ( logPathAbs ) ;
43+ string logName = Path . GetFileName ( logPathAbs [ 0 ] ) ;
44+ Assert . True ( logName . StartsWith ( "SyncLog_" ) ) ;
45+ Assert . Equal ( logFolder , config . LogFilePath ) ;
3846 }
3947
4048 [ Fact ]
4149 public void TestInvalidPeriod_DefaultsTo60 ( )
4250 {
4351 string period = "-5" ;
44- string sourceFolder = Path . Combine ( Path . GetTempPath ( ) , "SourceFolder" ) ;
45- string destFolder = Path . Combine ( Path . GetTempPath ( ) , "BackupFolder" ) ;
46- string logFolder = Path . Combine ( Path . GetTempPath ( ) , "Logs" ) ;
52+ string sourceFolder = Path . Combine ( _testDir , "SourceFolder" ) ;
53+ string destFolder = Path . Combine ( _testDir , "BackupFolder" ) ;
54+ string logFolder = Path . Combine ( _testDir , "Logs" ) ;
4755 if ( ! Directory . Exists ( sourceFolder ) )
4856 Directory . CreateDirectory ( sourceFolder ) ;
4957 if ( ! Directory . Exists ( destFolder ) )
@@ -61,19 +69,19 @@ public void TestInvalidPeriod_DefaultsTo60()
6169 Assert . Equal ( 60 , config . SyncPeriod ) ;
6270 Assert . Equal ( sourceFolder , config . SourceFolder ) ;
6371 Assert . Equal ( destFolder , config . BackupFolder ) ;
64- Assert . Equal ( Path . Combine ( logFolder , $ "SyncLog_ { DateTime . Now . ToString ( "dd-MM-yyyy" ) } . log") , config . LogFilePath ) ;
65-
66- Directory . Delete ( sourceFolder , true ) ;
67- Directory . Delete ( destFolder , true ) ;
68- Directory . Delete ( logFolder , true ) ;
72+ string [ ] logPathAbs = Directory . GetFiles ( logFolder , "*. log") ;
73+ Assert . Single ( logPathAbs ) ;
74+ string logName = Path . GetFileName ( logPathAbs [ 0 ] ) ;
75+ Assert . True ( logName . StartsWith ( "SyncLog_" ) ) ;
76+ Assert . Equal ( logFolder , config . LogFilePath ) ;
6977 }
7078
7179 [ Fact ]
7280 public void TestMissingSourceFolder_Fails ( )
7381 {
7482 string period = "15" ;
75- string destFolder = Path . Combine ( Path . GetTempPath ( ) , "BackupFolder" ) ;
76- string logFolder = Path . Combine ( Path . GetTempPath ( ) , "Logs" ) ;
83+ string destFolder = Path . Combine ( _testDir , "BackupFolder" ) ;
84+ string logFolder = Path . Combine ( _testDir , "Logs" ) ;
7785 if ( ! Directory . Exists ( destFolder ) )
7886 Directory . CreateDirectory ( destFolder ) ;
7987 if ( ! Directory . Exists ( logFolder ) )
@@ -85,17 +93,14 @@ public void TestMissingSourceFolder_Fails()
8593 var parseArgs = typeof ( FolderSync . FolderSync ) . GetMethod ( "ParseArgs" , System . Reflection . BindingFlags . NonPublic | System . Reflection . BindingFlags . Static ) ;
8694 var ex = Assert . Throws < TargetInvocationException > ( ( ) => parseArgs . Invoke ( null , new object [ ] { cmdArgs } ) ) ;
8795 Assert . IsType < ArgumentException > ( ex . InnerException ) ;
88-
89- Directory . Delete ( destFolder , true ) ;
90- Directory . Delete ( logFolder , true ) ;
9196 }
9297
9398 [ Fact ]
9499 public void TestMissingBackupFolder_Fails ( )
95100 {
96101 string period = "15" ;
97- string sourceFolder = Path . Combine ( Path . GetTempPath ( ) , "SourceFolder" ) ;
98- string logFolder = Path . Combine ( Path . GetTempPath ( ) , "Logs" ) ;
102+ string sourceFolder = Path . Combine ( _testDir , "SourceFolder" ) ;
103+ string logFolder = Path . Combine ( _testDir , "Logs" ) ;
99104 if ( ! Directory . Exists ( sourceFolder ) )
100105 Directory . CreateDirectory ( sourceFolder ) ;
101106 if ( ! Directory . Exists ( logFolder ) )
@@ -107,18 +112,15 @@ public void TestMissingBackupFolder_Fails()
107112 var parseArgs = typeof ( FolderSync . FolderSync ) . GetMethod ( "ParseArgs" , System . Reflection . BindingFlags . NonPublic | System . Reflection . BindingFlags . Static ) ;
108113 var ex = Assert . Throws < TargetInvocationException > ( ( ) => parseArgs . Invoke ( null , new object [ ] { cmdArgs } ) ) ;
109114 Assert . IsType < ArgumentException > ( ex . InnerException ) ;
110-
111- Directory . Delete ( sourceFolder , true ) ;
112- Directory . Delete ( logFolder , true ) ;
113115 }
114116
115117 [ Fact ]
116118 public void TestNestedPaths_Fails ( )
117119 {
118120 string period = "15" ;
119- string sourceFolder = Path . Combine ( Path . GetTempPath ( ) , "SourceFolder" ) ;
121+ string sourceFolder = Path . Combine ( _testDir , "SourceFolder" ) ;
120122 string destFolder = Path . Combine ( sourceFolder , "BackupFolder" ) ;
121- string logFolder = Path . Combine ( Path . GetTempPath ( ) , "Logs" ) ;
123+ string logFolder = Path . Combine ( _testDir , "Logs" ) ;
122124 if ( ! Directory . Exists ( sourceFolder ) )
123125 Directory . CreateDirectory ( sourceFolder ) ;
124126 if ( ! Directory . Exists ( logFolder ) )
@@ -130,18 +132,55 @@ public void TestNestedPaths_Fails()
130132 var parseArgs = typeof ( FolderSync . FolderSync ) . GetMethod ( "ParseArgs" , System . Reflection . BindingFlags . NonPublic | System . Reflection . BindingFlags . Static ) ;
131133 var ex = Assert . Throws < TargetInvocationException > ( ( ) => parseArgs . Invoke ( null , new object [ ] { cmdArgs } ) ) ;
132134 Assert . IsType < ArgumentException > ( ex . InnerException ) ;
135+ }
136+
137+ [ Fact ]
138+ public void SourcePathCannotBeInProgramDir_Fails ( )
139+ {
140+ string period = "15" ;
141+ string sourceFolder = Directory . GetCurrentDirectory ( ) ;
142+ string destFolder = Path . Combine ( _testDir , "BackupFolder" ) ;
143+ string logFolder = Path . Combine ( _testDir , "Logs" ) ;
144+ if ( ! Directory . Exists ( destFolder ) )
145+ Directory . CreateDirectory ( destFolder ) ;
146+ if ( ! Directory . Exists ( logFolder ) )
147+ Directory . CreateDirectory ( logFolder ) ;
148+ Assert . True ( Directory . Exists ( destFolder ) ) ;
133149
134- Directory . Delete ( sourceFolder , true ) ;
135- Directory . Delete ( logFolder , true ) ;
150+ string [ ] args = new string [ ] { "--syncPeriod" , period , "--sourceFolder" , sourceFolder , "--destFolder" , destFolder , "--log" , logFolder } ;
151+ IConfiguration cmdArgs = new ConfigurationBuilder ( ) . AddCommandLine ( args ) . Build ( ) ;
152+ var parseArgs = typeof ( FolderSync . FolderSync ) . GetMethod ( "ParseArgs" , System . Reflection . BindingFlags . NonPublic | System . Reflection . BindingFlags . Static ) ;
153+ var ex = Assert . Throws < TargetInvocationException > ( ( ) => parseArgs . Invoke ( null , new object [ ] { cmdArgs } ) ) ;
154+ Assert . IsType < ArgumentException > ( ex . InnerException ) ;
155+ }
156+
157+ [ Fact ]
158+ public void BackupPathCannotBeInProgramDir_Fails ( )
159+ {
160+ string period = "15" ;
161+ string sourceFolder = Path . Combine ( _testDir , "SourceFolder" ) ;
162+ string destFolder = Path . Combine ( Directory . GetCurrentDirectory ( ) , "BackupFolder" ) ;
163+ string logFolder = Path . Combine ( _testDir , "Logs" ) ;
164+ if ( ! Directory . Exists ( destFolder ) )
165+ Directory . CreateDirectory ( destFolder ) ;
166+ if ( ! Directory . Exists ( logFolder ) )
167+ Directory . CreateDirectory ( logFolder ) ;
168+ Assert . True ( Directory . Exists ( destFolder ) ) ;
169+
170+ string [ ] args = new string [ ] { "--syncPeriod" , period , "--sourceFolder" , sourceFolder , "--destFolder" , destFolder , "--log" , logFolder } ;
171+ IConfiguration cmdArgs = new ConfigurationBuilder ( ) . AddCommandLine ( args ) . Build ( ) ;
172+ var parseArgs = typeof ( FolderSync . FolderSync ) . GetMethod ( "ParseArgs" , System . Reflection . BindingFlags . NonPublic | System . Reflection . BindingFlags . Static ) ;
173+ var ex = Assert . Throws < TargetInvocationException > ( ( ) => parseArgs . Invoke ( null , new object [ ] { cmdArgs } ) ) ;
174+ Assert . IsType < ArgumentException > ( ex . InnerException ) ;
136175 }
137176
138177 [ Fact ]
139178 public void TestInvalidLogPath_DefaultsToCurrentDirectory ( )
140179 {
141180 string period = "15" ;
142- string sourceFolder = Path . Combine ( Path . GetTempPath ( ) , "SourceFolder" ) ;
143- string destFolder = Path . Combine ( Path . GetTempPath ( ) , "BackupFolder" ) ;
144- string logFolder = Path . Combine ( Path . GetTempPath ( ) , "NonExistentLogs" ) ;
181+ string sourceFolder = Path . Combine ( _testDir , "SourceFolder" ) ;
182+ string destFolder = Path . Combine ( _testDir , "BackupFolder" ) ;
183+ string logFolder = Path . Combine ( _testDir , "NonExistentLogs" ) ;
145184 if ( ! Directory . Exists ( sourceFolder ) )
146185 Directory . CreateDirectory ( sourceFolder ) ;
147186 if ( ! Directory . Exists ( destFolder ) )
@@ -157,18 +196,20 @@ public void TestInvalidLogPath_DefaultsToCurrentDirectory()
157196 Assert . Equal ( Int32 . Parse ( period ) , config . SyncPeriod ) ;
158197 Assert . Equal ( sourceFolder , config . SourceFolder ) ;
159198 Assert . Equal ( destFolder , config . BackupFolder ) ;
160- Assert . Equal ( Path . Combine ( Directory . GetCurrentDirectory ( ) , $ "SyncLog_{ DateTime . Now . ToString ( "dd-MM-yyyy" ) } .log") , config . LogFilePath ) ;
161199
162- Directory . Delete ( sourceFolder , true ) ;
163- Directory . Delete ( destFolder , true ) ;
200+ string [ ] finalLog = Directory . GetFiles ( Directory . GetCurrentDirectory ( ) , "*.log" ) ;
201+ Assert . Single ( finalLog ) ;
202+ string logName = Path . GetFileName ( finalLog [ 0 ] ) ;
203+ Assert . True ( logName . StartsWith ( "SyncLog_" ) ) ;
204+ Assert . Equal ( Directory . GetCurrentDirectory ( ) , config . LogFilePath ) ;
164205 }
165206
166207 [ Fact ]
167208 public void TestMissingLogPath_DefaultsToCurrentDirectory ( )
168209 {
169210 string period = "15" ;
170- string sourceFolder = Path . Combine ( Path . GetTempPath ( ) , "SourceFolder" ) ;
171- string destFolder = Path . Combine ( Path . GetTempPath ( ) , "BackupFolder" ) ;
211+ string sourceFolder = Path . Combine ( _testDir , "SourceFolder" ) ;
212+ string destFolder = Path . Combine ( _testDir , "BackupFolder" ) ;
172213 if ( ! Directory . Exists ( sourceFolder ) )
173214 Directory . CreateDirectory ( sourceFolder ) ;
174215 if ( ! Directory . Exists ( destFolder ) )
@@ -185,9 +226,34 @@ public void TestMissingLogPath_DefaultsToCurrentDirectory()
185226 Assert . Equal ( sourceFolder , config . SourceFolder ) ;
186227 Assert . Equal ( destFolder , config . BackupFolder ) ;
187228 Assert . Equal ( Path . Combine ( Directory . GetCurrentDirectory ( ) , $ "SyncLog_{ DateTime . Now . ToString ( "dd-MM-yyyy" ) } .log") , config . LogFilePath ) ;
229+ }
188230
189- Directory . Delete ( sourceFolder , true ) ;
190- Directory . Delete ( destFolder , true ) ;
231+ [ Fact ]
232+ public void TestNestedLogFileInSource ( )
233+ {
234+ string period = "15" ;
235+ string sourceFolder = Path . Combine ( _testDir , "SourceFolder" ) ;
236+ string destFolder = Path . Combine ( _testDir , "BackupFolder" ) ;
237+ string logFolder = Path . Combine ( _testDir , sourceFolder ) ;
238+ if ( ! Directory . Exists ( sourceFolder ) )
239+ Directory . CreateDirectory ( sourceFolder ) ;
240+ if ( ! Directory . Exists ( destFolder ) )
241+ Directory . CreateDirectory ( destFolder ) ;
242+ if ( ! Directory . Exists ( logFolder ) )
243+ Directory . CreateDirectory ( logFolder ) ;
244+ Assert . True ( Directory . Exists ( sourceFolder ) ) ;
245+
246+ string [ ] args = new string [ ] { "--syncPeriod" , period , "--sourceFolder" , sourceFolder , "--destFolder" , destFolder , "--log" , logFolder } ;
247+ IConfiguration cmdArgs = new ConfigurationBuilder ( ) . AddCommandLine ( args ) . Build ( ) ;
248+ var parseArgs = typeof ( FolderSync . FolderSync ) . GetMethod ( "ParseArgs" , System . Reflection . BindingFlags . NonPublic | System . Reflection . BindingFlags . Static ) ;
249+ Config config = ( Config ) parseArgs . Invoke ( null , new object [ ] { cmdArgs } ) ;
250+
251+ string fixedLogFolder = Directory . GetCurrentDirectory ( ) ;
252+ Assert . Equal ( fixedLogFolder , config . LogFilePath ) ;
253+ string [ ] finalLog = Directory . GetFiles ( Directory . GetCurrentDirectory ( ) , "*.log" ) ;
254+ Assert . Single ( finalLog ) ;
255+ string logName = Path . GetFileName ( finalLog [ 0 ] ) ;
256+ Assert . True ( logName . StartsWith ( "SyncLog_" ) ) ;
191257 }
192258
193259 [ Fact ]
@@ -198,5 +264,13 @@ public void TestNoArguments_Fails()
198264 var parseArgs = typeof ( FolderSync . FolderSync ) . GetMethod ( "ParseArgs" , System . Reflection . BindingFlags . NonPublic | System . Reflection . BindingFlags . Static ) ;
199265 Assert . Throws < TargetInvocationException > ( ( ) => parseArgs . Invoke ( null , new object [ ] { cmdArgs } ) ) ;
200266 }
267+
268+ public void Dispose ( )
269+ {
270+ Directory . Delete ( _testDir , true ) ;
271+ string [ ] logFiles = Directory . GetFiles ( Directory . GetCurrentDirectory ( ) , "*.log" ) ;
272+ foreach ( var log in logFiles )
273+ File . Delete ( log ) ;
274+ }
201275 }
202276}
0 commit comments