synology

对于将在Synology RS815 + NAS上检查备份文件的Spring Boot应用程序,我们希望能够轻松测试此NAS上存储的文件,而不必复制存储在该NAS上的7TB。

理想情况下,我们希望创建相同的文件结构以在Spring开发配置文件中使用Web应用程序,并在JUnit测试中使用这些文件结构。

介绍FileStructureCreator

我们首先创建一个新的类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());}}
}

基本上,这将创建整个目录结构和必要的文件。 我们只需要传递一个包含文件结构元数据的基本文件即可。

元数据保存时间戳,文件大小和该文件的路径。 看起来像这样:

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上,我们可以通过执行以下命令轻松生成具有(特定)目录的整个树结构的文件:

find backupftp -type f -printf
"%TY-%Tm-%TdT%TH:%TM:%.12TS\t%s\t%p\n">test/backupftp.files.txt

将生成的文件从您的Synology NAS复制到您的项目。

在JUnit测试中,我们使用FileStructureCreator类,如下面的示例所示。 请注意, FileStructureCreator实现了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应用程序,我们只定义一个@Configuration类,该类将为Synology NAS上定义的文件共享创建数据结构。

@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 ,所以在应用程序关闭时将自动调用close()方法,并在Spring Boot应用程序停止时从磁盘上删除所有文件。只是……不要在生产环境中运行开发人员资料; 我让你知道会发生什么。 ;-)将来,我们将向您展示如何构建备份检查器以监视和验证NAS上的备份。

翻译自: https://www.javacodegeeks.com/2018/04/mocking-files-for-junit-testing-a-spring-boot-web-application-on-synology-nas.html

synology

synology_用于在Synology NAS上测试Spring Boot Web应用程序的JUnit模拟文件相关推荐

  1. synology smb_用于在Synology NAS上测试Spring Boot Web应用程序的JUnit模拟文件

    synology smb 对于将在Synology RS815 + NAS上检查备份文件的Spring Boot应用程序,我们希望能够轻松测试此NAS上存储的文件,而不必复制存储在其上的7TB. 理想 ...

  2. 用于在Synology NAS上测试Spring Boot Web应用程序的JUnit模拟文件

    对于将在Synology RS815 + NAS上检查备份文件的Spring Boot应用程序,我们希望能够轻松测试此NAS上存储的文件,而不必复制存储在其上的7TB. 理想情况下,我们希望创建相同的 ...

  3. Spring Boot Web应用程序中注册 Servlet 的方法实例

    Spring Boot Web应用程序中注册 Servlet 的方法实例 本文实例工程源代码:https://github.com/KotlinSpringBoot/demo1_add_servlet ...

  4. 带有Gradle的Spring Boot Web应用程序

    1.简介 在继续使用Gradle创建演示Spring Boot Web应用程序之前,我假设我们已经准备好使用Gradle设置 . 摇篮设置指南 Gradle官方网站 2.创建演示应用程序 现在我们已经 ...

  5. 使用Gradle禁止Java和Spring Boot Web应用程序中的FindBugs警告

    如何在+ Spring Boot和+ Java应用程序中使用注释抑制FindBugs警告 如果您的构建由于FindBugs问题而中断,并且是假阳性,或者由于其他考虑而无法解决问题,则可以添加注释来忽略 ...

  6. linux群晖文件路径,如何访问本地网络中 Synology NAS 上的文件 (NFS)

    总览 Synology NAS 经过专门设计,可快速简单地在本地网络中存储和共享文件,让您直接访问 Synology NAS 上的文件而避免每次登录 DSM 的麻烦.您能够使用 NFS 访问 Syno ...

  7. 树莓派安装synology_如何从Synology NAS安装(和删除)应用程序包

    树莓派安装synology Packages are the applications that make your Synology NAS more than just a glorified n ...

  8. openshift k8s_带有DIY的Openshift上的Spring Boot / Java 8 / Tomcat 8

    openshift k8s DIY盒带是一种实验性盒带,提供了一种在OpenShift上测试不受支持的语言的方法. 它提供了最小限度的自由形式的支架,将墨盒的所有细节留给了应用程序开发人员 . 这篇博 ...

  9. 在Amazon Elastic Beanstalk上部署Spring Boot应用程序

    在此博客中,我们将看到如何在Amazon ElasticBeanstalk上部署Spring Boot应用程序. Amazon ElasticBeanstalk具有一个预配置的Java环境,可用于部署 ...

最新文章

  1. 用Spring Boot复刻一款天猫商城,你可以做到!
  2. python3菜鸟教程-python3入门教程之hello world
  3. 哈尔滨__伏尔加庄园
  4. 【Spring reference】@ResponseBody注解
  5. linux下改变文件的字符编码
  6. 简单地使用线程之一:使用异步编程模型
  7. 使用通用mapper实现条件查询_【微服务】152:Stream流和通用mapper批量查询的使用...
  8. 从零开始学PowerShell(10)PowerShell中的子表达式
  9. 字节跳动2021春招启动 提供超7000个岗位
  10. UI实用素材|字体在设计中的重要性
  11. Random在java中怎么用_java中random()函数用法介绍
  12. 数据库基础入门知识总结
  13. RS232与RS485协议原理及其应用
  14. Vivado使用记录(二)下载与固化
  15. Linux之sed流编辑器
  16. 网页报表等无法打印提示网页上有错误的解决办法
  17. spec.ports[0].name: Required value
  18. android照片涂抹功能,android:照片涂画功能实现过程及原理详解
  19. 拿Python当作计算器
  20. 如何快速实现一个基于Nginx的网站监控场景 – 操作篇

热门文章

  1. Android Architecture Components Part2:LiveData
  2. 完成这个例子,说出java中针对异常的处理机制。
  3. SELECT INTO 和 replace into SELECT 两种表复制语句
  4. class path resource [beans.xml] cannot be opened because it does not exist
  5. docker build 没有网络 执行dockerfile中yum报错 curl#6 - “Could not resolve host: mirrorlist.centos.org 解决方法
  6. golang 全局变量
  7. linux c 调试 strace 诊断 调试程序 异常退出 崩溃
  8. 图解 二叉查找树 红黑树
  9. A definition for the symbol 'symbolName' could not be located
  10. sscanf,sscanf_s及其相关用法