Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JUnit4-如果使用docker运行,如何测试只读/写保护目录_Java_Spring_Docker_Junit4 - Fatal编程技术网

Java JUnit4-如果使用docker运行,如何测试只读/写保护目录

Java JUnit4-如果使用docker运行,如何测试只读/写保护目录,java,spring,docker,junit4,Java,Spring,Docker,Junit4,我们有一个集成测试设置,用于测试缺少但必需的配置属性的行为。其中一个属性是一个目录,失败的上载应该写入该目录以备以后重试。此属性的一般行为应该是,当违反某些约束时,应用程序甚至不会启动并立即失败 这些属性由Spring通过某些ConfigurationProperties进行管理,其中我们有一个简单的S3MessageUploadSettings类 @Getter @塞特 @配置属性(前缀=“s3”) @验证 公共类S3MessageUploadSettings{ @NotNull 私有字符串b

我们有一个集成测试设置,用于测试缺少但必需的配置属性的行为。其中一个属性是一个目录,失败的上载应该写入该目录以备以后重试。此属性的一般行为应该是,当违反某些约束时,应用程序甚至不会启动并立即失败

这些属性由Spring通过某些
ConfigurationProperties
进行管理,其中我们有一个简单的
S3MessageUploadSettings

@Getter
@塞特
@配置属性(前缀=“s3”)
@验证
公共类S3MessageUploadSettings{
@NotNull
私有字符串bucketName;
@NotNull
私有字符串上传错误路径;
...
}
在相应的Spring配置中,我们现在执行某些验证检查,如路径是否存在、是否可写和目录,并在不满足某些断言时抛出相应的
RuntimeException
s:

@Slf4j
@导入({S3Config.class})
@配置
@EnableConfigurationProperties(S3MessageUploadSettings.class)
公共类S3MessageUploadSpringConfig{
@资源
私有S3MessageUploadSettings设置;
...
@施工后
公共void checkConstraints(){
String sPath=settings.getUploadErrorPath();
路径路径=路径。获取(sPath);
...
debug(“探测存在的路径{}”,路径);
如果(!Files.exists(path)){
抛出新的RuntimeException(“必需的错误上载目录“+”路径“+”不存在”);
}
debug(“Probig路径{}用于目录”,路径);
如果(!Files.isDirectory(path)){
抛出新的RuntimeException(“上载目录“+”路径“+”不是目录”);
}
debug(“探测写入权限的路径{}”,路径);
如果(!Files.isWritable(path)){
抛出新的RuntimeException(“错误上载路径“+”路径“+”不可写);
}
}
}
我们的测试设置现在如下所示:

公共类启动测试{
@阶级规则
public static TemporaryFolder testFolder=new TemporaryFolder();
私有静态文件基文件夹;
可访问的私有静态文件;
私有静态文件写保护;
私有静态文件非_目录;
@课前
公共静态void initFolderSetup()引发IOException{
BASE_FOLDER=testFolder.getRoot();
可访问=testFolder.newFolder(“可访问”);
WRITE_PROTECTED=testFolder.newFolder(“writeProtected”);
如果(!WRITE_PROTECTED.setReadOnly()){
失败(“无法将目录权限更改为只读”)
}
如果(!WRITE_PROTECTED.setWritable(false)){
失败(“无法将目录权限更改为可写(false)”;
}
NON_DIRECTORY=testFolder.newFile(“非目录”);
}
@配置
@进口({
S3MessageUploadSpringConfig.class,
S3MockConfig.class,
...
})
静态类BaseContextConfig{
//公共bean定义
...
}
@配置
@导入(BaseContextConfig.class)
@PropertySource(“类路径:ci.properties”)
静态类NoteExistingPathContextConfig{
@资源
私有S3MessageUploadSettings设置;
@施工后
公共无效更新设置(){
settings.setUploadErrorPath(BASE_FOLDER.getPath()+“/foo/bar”);
}
}
@配置
@导入(BaseContextConfig.class)
@PropertySource(“类路径:ci.properties”)
静态类NotWritablePathContextConfig{
@资源
私有S3MessageUploadSettings设置;
@施工后
公共无效更新设置(){
setUploadErrorPath(WRITE_PROTECTED.getPath());
}
}
...
@配置
@导入(BaseContextConfig.class)
@PropertySource(“类路径:ci.properties”)
静态类StartableContextConfig{
@资源
私有S3MessageUploadSettings设置;
@施工后
公共无效更新设置(){
setUploadErrorPath(ACCESSIBLE.getPath());
}
}
@试验
public void应失败启动duetonExistingErrorPathDirectory(){
ApplicationContext上下文=null;
试一试{
上下文=新的AnnotationConfigApplicationContext(StartupTest.NotExistingPathContextConfig.class);
失败(“不应该启动上下文”);
}捕获(例外e){
e、 printStackTrace();
断言(e,instanceOf(BeanCreationException.class));
断言(例如getMessage(),包含字符串(“必需的错误上载目录'+BASE_FOLDER+”/foo/bar'不存在”);
}最后{
上下文(context);
}
}
@试验
public void应失败StartupDuetOnWritablePathDirectory(){
ApplicationContext上下文=null;
试一试{
context=newannotationConfigApplicationContext(StartupTest.NotWritablePathContextConfig.class);
失败(“不应该启动上下文”);
}捕获(例外e){
断言(e,instanceOf(BeanCreationException.class));
断言(例如getMessage(),包含字符串(“错误上载路径“+”写入受保护“+”不可写入”);
}最后{
上下文(context);
} 
}
...
@试验
public void shouldStartUpSuccessfully(){
ApplicationContext上下文=null;
试一试{
context=newannotationConfigApplicationContext(StartableContextConfig.class);
}捕获(例外e){
e、 printStackTrace();
失败(“不应引发类型为“+e.getClass().getSimpleName()+”且消息为“+e.getMessage()”)的异常);
}最后{
氯
grant {
    permission java.io.FilePermission "/dev/pts/*", "read,write,delete";
};