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

对于将在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

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

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

相关文章

根据当天日期计算下一天日期

在日常编程中,经常需要根据当前计算相邻的下一个日期,以下就是这个小算法,直接上代码 // 判断是否是闰年 BOOL IsBissextileYear(int year) {if((((year%4==0) && (year%100)

利用根升余弦滤波器和整数倍内插的多相结构生成含采样频偏的过采样信号

多相表示在多抽样率信号处理中是一种基本方法,使用它可以在实现整数倍和分数倍抽取和内插时提高计算效率。 目前我能想到的应用是信号的成型滤波,需要内插,然后与低通滤波器(成型时为过采样的(根)升余弦波形)进行卷积,这个过程如果直接去计算的话,会有很多多余的乘法操作…

Spring Security with Spring Boot 2.0:使用Servlet堆栈的简单身份验证

Spring安全性是一个很好的框架&#xff0c;可节省开发人员的大量时间和精力。 此外&#xff0c;它还具有足够的灵活性&#xff0c;可以自定义并满足您的需求。 随着spring的发展&#xff0c;spring安全性也使得在项目中设置安全性变得更加容易和自举。 Spring Boot 2.0已经存在…

一种基于最大似然的语音信号混响时间(reverberation time)估计方法的MATLAB实现

基于最大似然(ML)估计器的盲RT估计-引言 混响效应是室内声学的一个重要现象,它是由声音在封闭空间中经多次反射而产生。描述混响效应强弱的一个重要参数是混响时间(Reverberation time, RT),其定义为当声源停止发声后,残余的声能在室内往复反射,经反射面吸收而强度逐渐减弱…

一种基于最大似然的语音信号混响时间(reverberation time)估计方法的纯C语言实现(姊妹篇)

基于最大似然(ML)估计器的盲RT估计-引言 混响效应是室内声学的一个重要现象,它是由声音在封闭空间中经多次反射而产生。描述混响效应强弱的一个重要参数是混响时间(Reverberation time, RT),其定义为当声源停止发声后,残余的声能在室内往复反射,经反射面吸收而强度逐渐减弱…

java与java ee_CapeDwarf – Java EE上的Google App Engine

java与java ee我有很多爱好。 从早期的Java EE规范一路走来&#xff0c;并用Java EE 7进行了“云”之旅&#xff0c;我很好奇看到新宣布的CapeDwarf项目有什么库存&#xff0c;可以在内部引入Google的平台即服务&#xff0c;提供“ Google App Engine ” 。 到目前为止的故事 …

基于MATLAB的高阶(两个二阶级联构成的四阶以及更高阶)数字图形音频均衡器系数计算(可直接用于DSP实现)

引言 前不久,在数字信号处理中需要对音频信号进行滤波,涉及图形均衡器、参数均衡器的设计,下面这个链接给出了一个图形音频均衡器的例子: https://arm-software.github.io/CMSIS_5/DSP/html/group__GEQ5Band.html 这个示例演示如何使用 Biquad 级联函数构建 5 波段图形均衡…

基于MATLAB的曼彻斯特调制与解调实现

引言 曼彻斯特编码也称为相位编码,是一种同步时钟编码技术。通过电平的高低转换来表示“0”或“1”,每一位的中间有一个跳变的动作,这个动作既作时钟信号,又作数据信号,但因为每一个码元都被调成两个电平,所以数据传输速率只有调制速率的1/2,其编码效率为50%。常用于局…

记录一次某MFC软件算法逆向之旅

传说中MFC必杀(并不能通用) 对于直接使用SDK而不使用第三方库的程序,我们要定位到程序的“关键代码”并不困难。通常在CreateWindow函数或DialogBoxParam函数下断点,可以直接获得其主界面的窗口过程或对话框过程。但是对于使用了MFC的程序,我们找到的窗口过程或对话框过程是…

mongodb启动不能锁定_使用MongoDB进行乐观锁定重试

mongodb启动不能锁定在我以前的文章中&#xff0c;我谈到了对MongoDB批处理程序采用乐观锁定的好处。 如我之前所写&#xff0c;乐观锁定异常是可恢复的异常&#xff0c;只要我们获取最新的Entity&#xff0c;我们就会对其进行更新并保存。 因为我们使用的是MongoDB&#xff0…

基于Funcode和VS2017的游戏开发

主要实现了两个小游戏,飞机大战和冰火人历险记,首先用Funcode生成地图文件和VS工程,然后进行编程 头文件 CommonAPI.h #ifndef _COMMON_API_H_ #define _COMMON_API_H_ // #include <windows.h>//===============================

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

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

【OFDM系列4】OFDM信号多径信道模型基础知识

多径信道模型(Multipath Channel Scenario) 信道脉冲响应(Channel Impulse Response, CIR) 信道的复基带脉冲响应如下所示 h ( τ ; t ) = ∑ l = 1 L a l ( t

kie-api_KIE-WB / JBPM控制台Ng –配置

kie-api大家好&#xff0c;这是我上一篇文章中有关如何使用jBPM Console的后续文章 。 这篇文章的主要思想是描述为了在您自己的公司中使用jBPM Console NG而需要进行的一些最常见的配置。 但是在讨论技术细节之前&#xff0c;我们将介绍KIE Workbench&#xff08;KIE-WB&#…

【OFDM系列5】单输入单输出OFDM(SISO-OFDM)多径信道迫零(ZF)和最小均方误差(MMSE)均衡器原理和公式推导

OFDM单输入单输出(SISO)迫零(ZF)均衡器 在去除CP之后,第k个子载波上的信号的FFT给出如下 Y k = H k D k + W k ⋯ ( 1 ) Y_k=H_k D_k+W_k\cdots(1)

如何在Tomcat中设置JNDI数据库连接池-Spring教程示例

在Spring和Tomcat中设置JNDI数据库连接池非常容易。 Tomcat服务器文档提供了有关如何在Tomcat 5、6或7中设置连接池的足够信息。在这里&#xff0c;我们将结合使用Tomcat 7和Spring框架在Tomcat服务器中创建连接池并在Spring中使用JNDI代码访问它们。 在上一篇文章中&#xff0…

win10任务栏透明+变窄+免安装

透明设置 在HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced中新建DWORD32位值TaskbarAcrylicOpacity&#xff0c;设置数值为0 重启资源管理器explorer.exe即可 变窄 下载7Taskbar软件7tt_setup.exe&#xff0c;直接解压&#xff0c;对于本…

java vm_Java VM –提防YoungGen空间

java vm正如您从我们以前的面向性能的文章中可能已经看到的那样&#xff0c;运行良好的JVM是实现最佳应用程序性能和稳定性的最重要目标之一。 这样的健康评估通常仅关注主要收集的频率&#xff08;避免&#xff09;或检测内存泄漏的存在。 年轻一代空间或短寿命物体的大小和足…

Java生产监控的阴暗面

自动化的工作流程是在敏捷环境中交付高质量产品的新金标准。 不幸的是&#xff0c;不断变化会带来不断的风险。 输入“可观察性”&#xff0c;这是一种度量&#xff0c;可以从系统的外部输出中推断出系统的内部状态。 知道应用程序如何在生产中运行的能力。 在本节中&#xff…

MATLAB库函数upfirdn(分数倍采样率变换)的C语言实现【姊妹篇2纯C语言实现】

upfirdn原理 yout = upfirdn(xin,h,p,q) upfirdn的功能在MATLAB官方帮助文档中说得很清楚 通过插零实现 p p p倍上采样对上采样之后的信号用给定的 h h h(通常为低通滤波器)进行滤波对滤波结果进行