Alternate e697dbe9c5997e35395fe158628dd8c5209481da
for Visual Studio 2022 and Windows 11.
読み取り中…
検索中…
一致する文字列を見つけられません
TransactionFileTest.cpp
[詳解]
1
5
6#include "pch.h"
7#include "TransactionFile.h"
8#include "FileUtility.h"
9#include "Binder.hpp"
10
11using namespace Microsoft::VisualStudio::CppUnitTestFramework;
12
13#define TEST_FOLDER _T("TranTest")
14#define TEST_FILE _T("TranTest.txt")
15#define TEST_FILE_1 _T("TranTest1.bin")
16#define TEST_FILE_2 _T("TranTest2.bin")
17
18namespace WindowsLibraryTest
19{
20 TEST_CLASS (TransactionFileTest)
21 {
22 public:
23 TEST_CLASS_INITIALIZE (ClassInitialize)
24 {
25 Logger::WriteMessage ("TransactionFileTest class initialize.\n");
26 }
27
28 TEST_CLASS_CLEANUP (ClassCleanup)
29 {
30 Logger::WriteMessage ("TransactionFileTest class cleanup.\n");
31 }
32
33 TEST_METHOD_INITIALIZE (MethodInitialize)
34 {
35 BOOL ret;
36
37 ret = alt::FileUtility::Copy (_T ("C:\\Windows\\Notepad.exe"), TEST_FILE_1);
38 Assert::IsTrue (ret, _T ("MethodInitialize failed.\n"));
39
41 if (ret)
42 {
44 Assert::IsTrue (ret, _T ("MethodInitialize failed.\n"));
45 }
46
48 if (ret)
49 {
51 Assert::IsTrue (ret, _T ("MethodInitialize failed.\n"));
52 }
53
55 if (ret)
56 {
58 Assert::IsTrue (ret, _T ("MethodInitialize failed.\n"));
59 }
60
61 Logger::WriteMessage ("TransactinFileTest method initialize.\n");
62 }
63
64 TEST_METHOD_CLEANUP (MethodCleanup)
65 {
67 {
69 Assert::IsTrue (ret, _T ("MethodInitialize failed.\n"));
70 }
71
73 {
75 Assert::IsTrue (ret, _T ("MethodCleanup failed.\n"));
76 }
77
79 {
81 Assert::IsTrue (ret, _T ("MethodCleanup failed.\n"));
82 }
83
84 Logger::WriteMessage ("TransactionFileTest method cleanup.\n");
85 }
86
87 TEST_METHOD (TransactionInitializeCommitTest)
88 {
89 BOOL ret;
91
92 ret = tran.Init (_T ("TransactionInitializeCommitTest"));
93 Assert::IsTrue (ret, _T ("TransactionFileUtility::Init() failed.\n"));
94
95 ret = tran.Commit ();
96 Assert::IsTrue (ret, _T ("TransactionFileUtility::Commit() failed.\n"));
97 }
98
99 TEST_METHOD (TransactionInitializeRollbackTest)
100 {
101 BOOL ret;
103
104 ret = tran.Init (_T ("TransactionInitializeRollbackTest"));
105 Assert::IsTrue (ret, _T ("TransactionFileUtility::Init() failed.\n"));
106
107 ret = tran.Rollback ();
108 Assert::IsTrue (ret, _T ("TransactionFileUtility::Rollback() failed.\n"));
109 }
110
111 TEST_METHOD (TransactionCreateDirectoryCommitTest)
112 {
113 BOOL ret;
115
116 ret = tran.Init (_T ("TransactionCreateDirectoryCommitTest"));
117 Assert::IsTrue (ret, _T ("TransactionFileUtility::Init() failed.\n"));
118
119 ret = tran.CreateFolder (TEST_FOLDER);
120 Assert::IsTrue (ret, _T ("TransactionFileUtility::CreateFolder() failed.\n"));
121
122 ret = tran.Commit ();
123 Assert::IsTrue (ret, _T ("TransactionFileUtility::Commit() failed.\n"));
124
126 Assert::IsTrue (ret, _T ("directory is not created.\n"));
127
129 Assert::IsTrue (ret, _T ("This is not a folder.\n"));
130 }
131
132 TEST_METHOD (TransactionCreateDirectoryRollbackTest1)
133 {
134 BOOL ret;
136 tran.New ();
137
138 ret = tran->Init (_T ("TransactionCreateDirectoryRollbackTest1"));
139 Assert::IsTrue (ret, _T ("TransactionFileUtility::Init() failed.\n"));
140
141 ret = tran->CreateFolder (TEST_FOLDER);
142 Assert::IsTrue (ret, _T ("TransactionFileUtility::CreateFolder() failed.\n"));
143
144 tran.Delete ();
145
147 Assert::IsFalse (ret, _T ("directory is still exist.\n"));
148 }
149
150 TEST_METHOD (TransactionCreateDirectoryRollbackTest2)
151 {
152 BOOL ret;
154
155 ret = tran.Init (_T ("TransactionCreateDirectoryRollbackTest2"));
156 Assert::IsTrue (ret, _T ("TransactionFileUtility::Init() failed.\n"));
157
158 ret = tran.CreateFolder (TEST_FOLDER);
159 Assert::IsTrue (ret, _T ("TransactionFileUtility::CreateFolder() failed.\n"));
160
161 ret = tran.Rollback ();
162 Assert::IsTrue (ret, _T ("TransactionFileUtility::Rollback() failed.\n"));
163
165 Assert::IsFalse (ret, _T ("directory is still exist.\n"));
166 }
167
168 TEST_METHOD (TransactionDeleteCommitTest)
169 {
170 BOOL ret;
172
173 ret = tran.Init (_T ("TransactionDeleteCommitTest"));
174 Assert::IsTrue (ret, _T ("TransactionFileUtility::Init() failed.\n"));
175
176 ret = tran.Delete (TEST_FILE_1);
177 Assert::IsTrue (ret, _T ("TransactionFileUtility::Delete() failed.\n"));
178
179 ret = tran.Commit ();
180 Assert::IsTrue (ret, _T ("TransactionFileUtility::Commit() failed.\n"));
181
183 Assert::IsFalse (ret, _T ("file is still exist.\n"));
184 }
185
186 TEST_METHOD (TransactionDeleteRollbackTest1)
187 {
188 BOOL ret;
190 tran.New ();
191
192 ret = tran->Init (_T ("TransactionDeleteRollbackTest1"));
193 Assert::IsTrue (ret, _T ("TransactionFileUtility::Init() failed.\n"));
194
195 ret = tran->Delete (TEST_FILE_1);
196 Assert::IsTrue (ret, _T ("TransactionFileUtility::Delete() failed.\n"));
197
198 tran.Delete();
199
201 Assert::IsTrue (ret, _T ("file is not exist.\n"));
202 }
203
204 TEST_METHOD (TransactionDeleteRollbackTest2)
205 {
206 BOOL ret;
208
209 ret = tran.Init (_T ("TransactionDeleteRollbackTest2"));
210 Assert::IsTrue (ret, _T ("TransactionFileUtility::Init() failed.\n"));
211
212 ret = tran.Delete (TEST_FILE_1);
213 Assert::IsTrue (ret, _T ("TransactionFileUtility::Delete() failed.\n"));
214
215 ret = tran.Rollback ();
216 Assert::IsTrue (ret, _T ("TransactionFileUtility::Rollback() failed.\n"));
217
219 Assert::IsTrue (ret, _T ("file is not exist.\n"));
220 }
221
222 TEST_METHOD (TransactionCopyCommitTest)
223 {
224 BOOL ret;
226
227 ret = tran.Init (_T ("TransactionCopyCommitTest"));
228 Assert::IsTrue (ret, _T ("TransactionFileUtility::Init() failed.\n"));
229
230 ret = tran.Copy (TEST_FILE_1, TEST_FILE_2);
231 Assert::IsTrue (ret, _T ("can't copy file.\n"));
232
233 ret = tran.Commit ();
234 Assert::IsTrue (ret, _T ("TransactionFileUtility::Commit() failed.\n"));
235
237 Assert::IsTrue (ret, _T ("file not exist.\n"));
238 }
239
240 TEST_METHOD (TransactionCopyRollbackTest1)
241 {
242 BOOL ret;
244 tran.New ();
245
246 ret = tran->Init (_T ("TransactionCopyRollbackTest1"));
247 Assert::IsTrue (ret, _T ("TransactionFileUtility::Init() failed.\n"));
248
249 ret = tran->Copy (TEST_FILE_1, TEST_FILE_2);
250 Assert::IsTrue (ret, _T ("TransactionFileUtility::Copy() failed.\n"));
251
253 Assert::IsTrue (ret, _T ("Transaction file copy failed.\n"));
254
255 tran.Delete();
256
258 Assert::IsFalse (ret, _T ("file is still exist.\n"));
259 }
260
261 TEST_METHOD (TransactionCopyRollbackTest2)
262 {
263 BOOL ret;
265
266 ret = tran.Init (_T ("TransactionCopyRollbackTest2"));
267 Assert::IsTrue (ret, _T ("TransactionFileUtility::Init() failed.\n"));
268
269 ret = tran.Copy (TEST_FILE_1, TEST_FILE_2);
270 Assert::IsTrue (ret, _T ("TransactionFileUtility::Copy() failed.\n"));
271
273 Assert::IsTrue (ret, _T ("Transaction file copy failed.\n"));
274
275 ret = tran.Rollback ();
276 Assert::IsTrue (ret, _T ("TransactionFileUtility::Rollback() failed.\n"));
277
279 Assert::IsFalse (ret, _T ("file is still exist.\n"));
280 }
281
282 TEST_METHOD (TransactionMoveCommitTest)
283 {
284 BOOL ret;
286
287 ret = tran.Init (_T ("TransactionMoveCommitTest"));
288 Assert::IsTrue (ret, _T ("TransactionFileUtility::Init() failed.\n"));
289
290 ret = tran.Move (TEST_FILE_1, TEST_FILE_2);
291 Assert::IsTrue (ret, _T ("TransactionFileUtility::Move() failed.\n"));
292
293 ret = tran.Commit ();
294 Assert::IsTrue (ret, _T ("TransactionFileUtility::Commit() failed.\n"));
295
297 Assert::IsFalse (ret, _T ("file is still exist.\n"));
298
300 Assert::IsTrue (ret, _T ("FileUtility::IsExist() failed.\n"));
301 }
302
303 TEST_METHOD (TransactionMoveRollbackTest1)
304 {
305 BOOL ret;
307 tran.New ();
308
309 ret = tran->Init (_T ("TransactionMoveRollbackTest1"));
310 Assert::IsTrue (ret, _T ("TransactionFileUtility::Init() failed.\n"));
311
312 ret = tran->Move (TEST_FILE_1, TEST_FILE_2);
313 Assert::IsTrue (ret, _T ("TransactionFileUtility::Move() failed.\n"));
314
315 tran.Delete();
316
318 Assert::IsTrue (ret, _T ("FileUtility::IsExist() failed.\n"));
319
321 Assert::IsFalse (ret, _T ("file is still exist.\n"));
322 }
323
324 TEST_METHOD (TransactionMoveRollbackTest2)
325 {
326 BOOL ret;
328
329 ret = tran.Init (_T ("TransactionMoveRollbackTest2"));
330 Assert::IsTrue (ret, _T("TransactionFileUtility::Init() failed.\n"));
331
332 ret = tran.Move (TEST_FILE_1, TEST_FILE_2);
333 Assert::IsTrue (ret, _T ("TransactionFileUtility::Move() failed.\n"));
334
335 ret = tran.Rollback ();
336 Assert::IsTrue (ret, _T ("TransactionFileUtility::Rollback() failed.\n"));
337
339 Assert::IsTrue (ret, _T("file is not exist.\n"));
340
342 Assert::IsFalse (ret, _T("file is still exist.\n"));
343 }
344
345 TEST_METHOD (TransactionMakeHardLinkCommitTest)
346 {
347 BOOL ret;
349
350 ret = tran.Init (_T ("TransactionMakeHardLinkCommitTest"));
351 Assert::IsTrue (ret);
352
354 Assert::IsTrue (ret, _T ("TransactionFileUtility::MakeHardLink() failed.\n"));
355
356 ret = tran.Commit ();
357 Assert::IsTrue (ret, _T ("TransactionFileUtility::Commit() failed.\n"));
358
360 Assert::IsTrue (ret);
361
363 Assert::IsTrue (ret);
364 }
365
366 TEST_METHOD (TransactionMakeHardLinkRollbackTest1)
367 {
368 BOOL ret;
370 tran.New ();
371
372 ret = tran->Init (_T ("TransactionMakeHardLinkRollbackTest1"));
373 Assert::IsTrue (ret);
374
375 ret = tran->MakeHardLink (TEST_FILE_1, TEST_FILE_2);
376 Assert::IsTrue (ret, _T ("TransactionFileUtility::MakeHardLink() failed.\n"));
377
378 tran.Delete();
379
381 Assert::IsTrue (ret, _T("file is not exist.\n"));
382
384 Assert::IsFalse (ret, _T("file is still exist.\n"));
385 }
386
387 TEST_METHOD (TransactionMakeHardLinkRollbackTest2)
388 {
389 BOOL ret;
391
392 ret = tran.Init (_T ("TransactionMakeHardLinkRollbackTest2"));
393 Assert::IsTrue (ret);
394
396 Assert::IsTrue (ret, _T ("TransactionFileUtility::MakeHardLink() failed.\n"));
397
398 ret = tran.Rollback ();
399 Assert::IsTrue (ret, _T ("TransactionFileUtility::Rollback() failed.\n"));
400
402 Assert::IsTrue (ret, _T("file is not exist.\n"));
403
405 Assert::IsFalse (ret, _T("file is still exist.\n"));
406 }
407
408 TEST_METHOD (TransactionIOCommitTest)
409 {
410 BOOL ret;
411 DWORD dwLen;
413
414 ret = tran.Init (_T ("TransactionIOCommitTest"));
415 Assert::IsTrue (ret);
416
417 alt::TransactionFile tranFile;
418 ret = tranFile.Create (
419 tran.GetHandle (),
420 TEST_FILE,
421 GENERIC_READ | GENERIC_WRITE, // GENERIC_ALLはNG
422 0,
423 CREATE_ALWAYS);
424
425 Assert::IsFalse (alt::FileUtility::IsExist (TEST_FILE), _T("TransactionFileUtility::Create() failed.\n"));
426
427 LPCTSTR lpctszContext = _T ("TEST TEST TEST");
428 dwLen = tranFile.Write (lpctszContext, static_cast<DWORD>(_tcslen (lpctszContext) * sizeof (TCHAR)));
429 Assert::AreEqual<SIZE_T> (_tcslen (lpctszContext) * sizeof (TCHAR), dwLen);
430
431 Assert::IsFalse (alt::FileUtility::IsExist (TEST_FILE), _T("TransactionFile::Write() failed.\n"));
432
433 auto size = tranFile.GetSize ();
434 Assert::AreEqual<SIZE_T> (_tcslen (lpctszContext) * sizeof (TCHAR), size);
435
436 Assert::IsFalse (alt::FileUtility::IsExist (TEST_FILE), _T("file is still exist.\n"));
437
438 ret = tranFile.SetPointer (FILE_BEGIN);
439 Assert::IsTrue (ret);
440
441 Assert::IsFalse (alt::FileUtility::IsExist (TEST_FILE), _T("file is still exist.\n"));
442
443 TCHAR tszBuf[256];
444 dwLen = tranFile.Read (tszBuf, sizeof (tszBuf));
445 tszBuf[dwLen / sizeof (TCHAR)] = '\0';
446 Assert::AreEqual<DWORD> (static_cast<DWORD>(_tcslen (lpctszContext) * sizeof (TCHAR)), dwLen);
447 Assert::AreEqual<int> (0, _tcscmp (lpctszContext, tszBuf));
448
449 Assert::IsFalse (alt::FileUtility::IsExist (TEST_FILE), _T("file is still exist.\n"));
450
451 ret = tranFile.Flush ();
452 Assert::IsTrue (ret, _T("TransactionFile::Flush() failed.\n"));
453
454 Assert::IsFalse (alt::FileUtility::IsExist (TEST_FILE), _T("file is still exist.\n"));
455
456 ret = tranFile.Close ();
457 Assert::IsTrue (ret, _T("TransactionFile::Close() failed.\n"));
458
459 Assert::IsFalse (alt::FileUtility::IsExist (TEST_FILE), _T("file is still exist.\n"));
460
461 ret = tran.Commit ();
462 Assert::IsTrue (ret, _T("TransactionFile::Commit() failed.\n"));
463
464 Assert::IsTrue (alt::FileUtility::IsExist (TEST_FILE));
465 }
466
467 TEST_METHOD (TransactionIORollbackTest)
468 {
469 BOOL ret;
470 DWORD dwLen;
472
473 ret = tran.Init (_T ("TransactionIORollbackTest"));
474 Assert::IsTrue (ret);
475
476 alt::TransactionFile tranFile;
477 ret = tranFile.Create (
478 tran.GetHandle (),
479 TEST_FILE,
480 GENERIC_READ | GENERIC_WRITE, // GENERIC_ALLはNG
481 0,
482 CREATE_ALWAYS);
483
484 Assert::IsFalse (alt::FileUtility::IsExist (TEST_FILE), _T("file is still exist.\n"));
485
486 LPCTSTR lpctszContext = _T ("TEST TEST TEST");
487 dwLen = tranFile.Write (lpctszContext, static_cast<DWORD>(_tcslen (lpctszContext) * sizeof (TCHAR)));
488 Assert::AreEqual<SIZE_T> (_tcslen (lpctszContext) * sizeof (TCHAR), dwLen);
489
490 Assert::IsFalse (alt::FileUtility::IsExist (TEST_FILE), _T("file is still exist.\n"));
491
492 LONGLONG size = tranFile.GetSize ();
493 Assert::AreEqual<SIZE_T> (_tcslen (lpctszContext) * sizeof (TCHAR), size);
494
495 Assert::IsFalse (alt::FileUtility::IsExist (TEST_FILE), _T("file is still exist.\n"));
496
497 ret = tranFile.SetPointer (FILE_BEGIN);
498 Assert::IsTrue (ret, _T("TransactionFile::SetPointer() failed.\n"));
499
500 Assert::IsFalse (alt::FileUtility::IsExist (TEST_FILE), _T("file is still exist.\n"));
501
502 TCHAR tszBuf[256];
503 dwLen = tranFile.Read (tszBuf, sizeof (tszBuf));
504 tszBuf[dwLen / sizeof (TCHAR)] = '\0';
505 Assert::AreEqual<SIZE_T> (_tcslen (lpctszContext) * sizeof (TCHAR), dwLen);
506 Assert::AreEqual<int> (0, _tcscmp (lpctszContext, tszBuf));
507
508 Assert::IsFalse (alt::FileUtility::IsExist (TEST_FILE), _T("file is still exist.\n"));
509
510 ret = tranFile.Flush ();
511 Assert::IsTrue (ret, _T("TransactionFile::Flush() failed.\n"));
512
513 Assert::IsFalse (alt::FileUtility::IsExist (TEST_FILE), _T("file is still exist.\n"));
514
515 ret = tranFile.Close ();
516 Assert::IsTrue (ret, _T("TransactionFile::Close() failed.\n"));
517
518 Assert::IsFalse (alt::FileUtility::IsExist (TEST_FILE), _T("file is still exist.\n"));
519
520 ret = tran.Rollback ();
521 Assert::IsTrue (ret, _T("TransactionFile::Rollback() failed.\n"));
522
523 Assert::IsFalse (alt::FileUtility::IsExist (TEST_FILE), _T("file is still exist.\n"));
524 }
525 };
526}
newオブジェクトを管理するコンテナクラス
ファイルハンドルを伴わないファイルIOに関するWindowsAPIを集約した クラス
#define TEST_FILE
#define size
トランザクションNTFSに関するAPIを集約したクラス
#define TEST_FILE_1
#define TEST_FOLDER
#define TEST_FILE_2
プリコンパイル済みヘッダー ファイルです。
LONGLONG APIENTRY GetSize() const
ファイルサイズを取得します。
Definition: File.cpp:51
BOOL APIENTRY SetPointer(DWORD dwMoveMethod, LARGE_INTEGER liDistanceToMove={ 0 }) const
ファイルポインタを移動します。
Definition: File.cpp:37
static BOOL APIENTRY RemoveDir(LPCTSTR name)
ディレクトリの削除
Definition: FileUtility.cpp:87
static BOOL APIENTRY IsDirectory(LPCTSTR name)
ディレクトリの存在確認
static BOOL APIENTRY Copy(LPCTSTR source, LPCTSTR dest, BOOL bFailIfExists=FALSE)
ファイルのコピー
Definition: FileUtility.cpp:62
static BOOL APIENTRY IsExist(LPCTSTR name)
ディレクトリ・ファイルの存在確認
static BOOL APIENTRY Delete(LPCTSTR name)
ファイルの削除
Definition: FileUtility.cpp:57
HANDLE APIENTRY GetHandle() const
継承先はこの関数でハンドルを取得します。
BOOL APIENTRY Close()
使用しなくなったハンドルはこれでクローズします。
BOOL APIENTRY Flush() const
まだデバイスに出力されていないデータを吐き出させます。
DWORD APIENTRY Read(LPVOID lpvBuffer, DWORD dwSize) const
HANDLEを使ってデータを読み込みます。
DWORD APIENTRY Write(LPCVOID lpcvBuffer, DWORD dwSize) const
HANDLEを使ってデータを書き込みます。
トランザクションNTFSに関するクラス
BOOL APIENTRY Create(HANDLE hTransaction, LPCTSTR pctszFileName, DWORD dwDesiredAccess, DWORD dwShareMode, DWORD dwCreationDisposition)
ファイルを作成、オープンします。
トランザクションNTFSに関するユーティリティクラス
BOOL APIENTRY Copy(LPCTSTR lpctszSrcFileName, LPCTSTR lpctszDstFileName) const
ファイルのコピー
BOOL APIENTRY Delete(LPCTSTR lpctszFileName) const
ファイルの削除
BOOL APIENTRY Init(LPWSTR lpwszDescription)
初期化
BOOL APIENTRY MakeHardLink(LPCTSTR lpctszSrcFileName, LPCTSTR lpctszLinkFileName) const
ハードリンクの作成
BOOL APIENTRY Rollback() const
トランザクションのロールバック
BOOL APIENTRY CreateFolder(LPCTSTR lpctszFolderName) const
フォルダの作成
BOOL APIENTRY Move(LPCTSTR lpctszSrcFileName, LPCTSTR lpctszDstFileName) const
ファイルの移動
BOOL APIENTRY Commit() const
トランザクションのコミット
newオブジェクトを管理するコンテナクラス
Definition: Binder.hpp:18
bool APIENTRY New(Args... args)
管理オブジェクトの作成
Definition: Binder.hpp:44
VOID APIENTRY Delete()
管理オブジェクトの開放
Definition: Binder.hpp:51
TEST_CLASS(ArrayTest)
Definition: ArrayTest.cpp:19