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

synology smb

对于将在Synology RS815 + NAS上检查备份文件的Spring Boot应用程序,我们希望能够轻松测试此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 smb

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/333305.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Sublime Text for Mac如何支持GBK编码

需要安装相关的字符编码插件&#xff0c;你可以安装以下三款插件&#xff1a; 1.ConvertToUTF8 &#xff1a;GBK 转 UTF8 插件 推荐安装这个&#xff0c;这个插件不仅可以解决 GBK 的问题&#xff0c;还可以解决其它的编码问题。 In most cases, this plug-in will take car…

常州全国计算机考点,2017年常州高考考点及考场查询系统

出国留学网高考考场查询频道为大家提供2017年常州高考考点及考场查询系统&#xff0c;更多高考准考证及高考考场信息请关注我们网站的更新!猜你喜欢&#xff1a;进场及出场后一、“穿”“带”双齐进考场。穿着整齐进考场&#xff0c;不要穿拖鞋&#xff0c;背心等。带齐考试用品…

vmware用户名和密码_VMWare vijava –“用户名或密码不正确”异常的奇怪情况

vmware用户名和密码在我参与的一个项目中&#xff0c;我们使用yavijava &#xff08;这是vijava的分支 &#xff09;库与托管我们的VM的vCenter进行交互。 vCenter通过其Web服务端点公开了各种API&#xff0c;这些API通过HTTP调用。 yavijava库具有必要的钩子&#xff0c;允许开…

大学计算机系学生,大学计算机专业学生自我介绍

大学计算机专业学生自我介绍当进入一个新环境&#xff0c;我们不得不需要向他人介绍自己&#xff0c;自我介绍是一种认识自我的手段。那么自我介绍有什么格式呢&#xff1f;以下是小编收集整理的大学计算机专业学生自我介绍&#xff0c;仅供参考&#xff0c;大家一起来看看吧。…

java从数组查找指定整数_如何在Java中使用重复项查找整数数组中的K个缺失数字?...

java从数组查找指定整数自从我讨论任何编码或算法面试问题以来已经有很长时间了&#xff0c;因此我想重新考虑一种最流行的基于数组的编码问题&#xff0c;即在给定数组中查找缺失的数字。 在进行编程工作面试之前&#xff0c;您可能已经听说过或看到过此问题&#xff0c;但是面…

Java代码的执行顺序

代码块的执行顺序如下&#xff1a; 1.静态块 2.父类构造器 3.本类中的块 4.本类的构造器 代码语句执行顺序&#xff1a; 整体是从上到下&#xff0c;从左到右&#xff0c;但是赋值语句&#xff0c;则是从右到左&#xff0c;必须先执行等号右边的语句得到值&#xff0c;再声明…

百度feeds联盟软件测试开发,UI 自动化测试用例整理举例-百度首页

前言现在分享下如何进行用例整理和组合管理。例子&#xff1a;以喜闻乐见的 百度 首页为例吧。场景分析&#xff1a;1. 测试点&#xff1a;百度首页&#xff0c;我们可以设定红色部分为测试点&#xff1a;共用 7 个测试点&#xff1a;测试搜索功能是否正常。测试右上 6 个常用链…

jdk8读取文件_用于从文件读取/写入文件的新JDK 11文件方法

jdk8读取文件我之前的文章重点讨论了可能添加到JDK 11中的Files.isSameContent()方法。 JDK-8201276 [“&#xff08;fs&#xff09;向文件添加方法以从文件读取字符串或向文件写入字符串”]提到了此新方法&#xff0c;并重点介绍了本文的主题&#xff1a; readString(Path) …

IntelliJ IDEA for Mac如何通过指定的关键字查找/搜索类文件

查找对话框 按下组合键 <Shift-Command-F> 打开查找对话框&#xff0c;如下图所示&#xff1a; 匹配模式 Match case&#xff1a;区分大小写 Words&#xff1a;匹配完整的单词 例如&#xff0c;我要在下面的文本中匹配搜索 liaowenxiong Regex&#xff1a;正则表达式…

计算机活动天窗,玩出花样,天窗的正确打开方式

最近&#xff0c;一位妈妈因天窗而走红&#xff0c;甚至还引发了新一轮父母育儿方式的热烈探讨&#xff0c;车叔很疑惑&#xff0c;这天窗到底怎么了&#xff1f;原来&#xff0c;这位年轻妈妈为引导不愿上学的孩子去上学&#xff0c;灵机一动&#xff0c;采取了有别于打骂或哄…

input发送a.jax_与时俱进:在JAX-RS API中采用OpenAPI v3.0.0

input发送a.jax看到时间流逝如此之快&#xff0c;真是太恐怖了&#xff01; OpenAPI规范3.0.0是对Swagger规范的重大改进&#xff0c;大部分已于一年前发布&#xff0c;但工具赶上了一段时间。 但是&#xff0c;随着最近Swagger Core 2.0.0的正式发布&#xff0c;事情肯定会加速…

display和show的区别

一、词义不同 1、display &#xff1a;展览&#xff0c;陈列&#xff1b;陈列品&#xff0c;展览品&#xff1b;显示器&#xff1b;炫耀。 例句&#xff1a;It was an incredibledisplayof motherly love and forgiveness. 那是慈母般关爱与宽容的了不起的表现。 2、show&am…

人类一败涂地邀请好友一直显示连接服务器,人类一败涂地怎么邀请好友 局域网创建房间方法图文教学-游侠网...

人类一败涂地怎么邀请好友?想要邀请好友&#xff0c;就要先创建房间&#xff0c;有些玩家不知道具体的操作&#xff0c;这里给大家带来了“主播北北”提供的人类一败涂地局域网创建房间方法图文教学&#xff0c;一起学习下吧。局域网创建房间方法图文教学按照下列步骤操作操作…

将json绑定为对象_了解自定义对象创建:JSON绑定概述系列

将json绑定为对象让我们看一下JSON绑定如何处理自定义对象的创建。 本系列的下一篇文章将介绍如何使用适配器自定义JSON-B。 JSON-B期望所有类都有一个公共的无参数构造函数 &#xff0c;在反序列化过程中使用它来实例化目标类。 创建实例后&#xff0c;可通过调用适当的sett…

什么是迭代

迭代是重复反馈过程的活动&#xff0c;其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次“迭代”&#xff0c;而每一次迭代得到的结果会作为下一次迭代的初始值。 重复执行一系列运算步骤&#xff0c;从前面的量依次求出后面的量的过程。此过程的每一次结果&a…

sum服务器操作系统,SUM服务器监控软件

SUM服务器监控软件是服务器监控软件中最为流行的一种企业级监控软件系统&#xff0c;它具有功能强大、监控计数器齐全、完全可配置可管理、集中的监控软件、良好的可扩展性。它除了为企业单位提供IT系统(服务器、网络设备等)的基础监控外&#xff0c;还为企业提供运行在这些基础…

jpa批量保存,事务没提交_在事务外自动保存托管JPA实体

jpa批量保存,事务没提交Spring中的存储库和事务并存。 Spring中的所有数据库访问都应在事务内运行&#xff0c;并且通常在某个地方使用Transactional来强制执行此操作。 但是&#xff0c;这并不总是必需的。 例如&#xff0c;当使用Spring Data时&#xff0c;您的存储库使用Sim…

sum和total的区别

文章目录一、词义辨析不一样二、词义广泛性不一样三、变形词不一样一、词义辨析不一样 1、sum指两个或更多的数目相加的总和。 例&#xff1a;When you add all the figures together, the sum is100. 当你把这些数字加起来&#xff0c;总数是100。 2、total指总量之大&…

速达服务器账套定期维护么,速达软件常见操作问题解决方法

《速达软件常见操作问题解决方法》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《速达软件常见操作问题解决方法(11页珍藏版)》请在人人文库网上搜索。1、速达软件常见操作问题解决方法,速达软件 ,1,打开客户端登陆时“你输入的数值不规范&#xff0c;请输入整数&…