javascript
synology smb_用于在Synology NAS上测试Spring Boot Web应用程序的JUnit模拟文件
synology smb
對于將在Synology RS815 + NAS上檢查備份文件的Spring Boot應(yīng)用程序,我們希望能夠輕松測試此NAS上存儲的文件,而不必復(fù)制存儲在其上的7TB。
理想情況下,我們希望創(chuàng)建相同的文件結(jié)構(gòu)以在Spring開發(fā)配置文件中使用Web應(yīng)用程序,并在JUnit測試中使用這些文件結(jié)構(gòu)。
介紹FileStructureCreator
我們首先創(chuàng)建一個新的類FileStructureCreator ,如下所示:
@Getter @Setter public class FileStructureCreator implements Closeable {public static final Path baseTestPath = Paths.get("testFiles");private Path fileStructureBasePath;public static FileStructureCreator create(Path file) {return createStructure(file, false);}public static FileStructureCreator createTempDirectory(Path file) {return createStructure(file, true);}@SneakyThrowsprivate static FileStructureCreator createStructure(Path file, boolean createTempDirectory) {FileStructureCreator fileStructureCreator = new FileStructureCreator();if (!Files.exists(baseTestPath)) {Files.createDirectory(baseTestPath);}String path = baseTestPath.toString() + (createTempDirectory ? "/" + UUID.randomUUID().toString() : "")+ "/";Path basePath = Paths.get(path);fileStructureCreator.setFileStructureBasePath(basePath);FileUtils.forceMkdir(basePath.toFile());try (Stream<String> stream = Files.lines(file)) {stream.forEach(line -> {Metadata fileMetaData = Metadata.from(line);Path fileEntry = Paths.get(path + fileMetaData.getWindowsSafeFilename());try {FileUtils.forceMkdir(fileEntry.getParent().toFile());if (!Files.exists(fileEntry)) {Files.write(fileEntry, line.getBytes());Files.setLastModifiedTime(fileEntry, FileTime.from(fileMetaData.getModificationTime()));}} catch (IOException ignore) {throw new RuntimeException("Exception creating directory: " + fileEntry.getParent());}});}return fileStructureCreator;}@Override@SneakyThrowspublic void close() {if (fileStructureBasePath != null) {FileUtils.deleteDirectory(fileStructureBasePath.toFile());}} }基本上,這將創(chuàng)建整個目錄結(jié)構(gòu)和必要的文件。 我們只需要傳遞一個包含文件結(jié)構(gòu)元數(shù)據(jù)的基本文件即可。
元數(shù)據(jù)保存時間戳,文件大小和該文件的路徑。 看起來像這樣:
2016-04-05T10:30:15.012345678 ??5120backupftp/@eaDir/sharesnap_share_configuration/SYNO@.quota2018-02-26T00:00:09.012345678 ?169backupftp/@eaDir/sharesnap_share_configuration/share_configuration然后,在Synology NAS上,我們可以通過執(zhí)行以下命令輕松生成具有(特定)目錄的整個樹結(jié)構(gòu)的文件:
find backupftp -type f -printf "%TY-%Tm-%TdT%TH:%TM:%.12TS\t%s\t%p\n">test/backupftp.files.txt將生成的文件從您的Synology NAS復(fù)制到您的項目。
在JUnit測試中,我們使用FileStructureCreator類,如下面的示例所示。 請注意, FileStructureCreator實現(xiàn)了AutoCloseable ,因此我們可以在測試完成后使用try / catch塊來清理文件。
@Value("classpath:/TestDiskConsistencyPolicy-notEnoughFileSets.txt") private Path notEnoughFileSets;@Test(expected = RuntimeException.class) public void backupSetWithNoFileSetsThrowException() {try( FileStructureCreator creator = FileStructureCreator.createTempDirectory(notEnoughFileSets) ) {BackupSet backupSet = BackupSet.builder().uri(creator.getFileStructureBasePath().toString()).build();new DiskConsistencyPolicy(backupSet).execute();assertTrue( "Expecting a RuntimeException here", false);} }對于Spring Boot應(yīng)用程序,我們只定義一個@Configuration類,它將為Synology NAS上定義的文件共享創(chuàng)建數(shù)據(jù)結(jié)構(gòu)。
@Configuration @Profile("dev") public class TestFilesInstaller {@Beanpublic FileStructureCreator ftpFiles(@Value("classpath:/backupftp.files.txt") Path file) {return FileStructureCreator.create(file);}@Beanpublic FileStructureCreator nfsFiles(@Value("classpath:/backupnfs.files.txt") Path file) {return FileStructureCreator.create(file);} } 因為它們被定義為@Bean ,所以在應(yīng)用程序關(guān)閉時將自動調(diào)用close()方法,并在Spring Boot應(yīng)用程序停止時從磁盤上刪除所有文件。
只是……不要在生產(chǎn)環(huán)境中運行開發(fā)人員資料; 我讓你知道會發(fā)生什么。 ;-)
將來,我們將向您展示如何構(gòu)建備份檢查器以監(jiān)視和驗證NAS上的備份。
翻譯自: https://www.javacodegeeks.com/2018/04/mocking-files-for-junit-testing-a-spring-boot-web-application-on-synology-nas.html
synology smb
總結(jié)
以上是生活随笔為你收集整理的synology smb_用于在Synology NAS上测试Spring Boot Web应用程序的JUnit模拟文件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java ldap操作实例_Java S
- 下一篇: qq号怎么绑定手机 如何把QQ账号绑定手