2121import com .spectralogic .ds3client .commands .interfaces .MetadataImpl ;
2222import com .spectralogic .ds3client .networking .Headers ;
2323import com .spectralogic .ds3client .networking .Metadata ;
24+ import com .spectralogic .ds3client .utils .ResourceUtils ;
25+ import org .apache .commons .io .FileUtils ;
2426import org .apache .http .Header ;
2527import org .apache .http .message .BasicHeader ;
2628import org .junit .Assert ;
3234import java .lang .reflect .Method ;
3335import java .nio .file .Files ;
3436import java .nio .file .Path ;
37+ import java .nio .file .Paths ;
3538import java .nio .file .attribute .BasicFileAttributes ;
3639import java .util .List ;
3740import java .util .Set ;
4144import static com .spectralogic .ds3client .metadata .MetadataKeyConstants .METADATA_PREFIX ;
4245
4346public class WindowsMetadataRestore_Test {
47+ private static final String FILE_NAME = "LoremIpsum.txt" ;
48+ private static final String localOS = MetaDataUtil .getOS ();
49+
4450 @ Before
4551 public void checkPreconditions () {
4652 Assume .assumeTrue (org .apache .commons .lang3 .SystemUtils .IS_OS_WINDOWS );
4753 }
48-
49- private final File file = new File (getClass ().getClassLoader ().getResource ("LoremIpsum.txt" ).getFile ());
50- private final String localOS = MetaDataUtil .getOS ();
51-
54+
5255 @ Test
5356 public void restoreFileTimes_Test () throws Exception {
5457 final BasicHeader basicHeader [] = new BasicHeader [3 ];
55- final BasicFileAttributes attr = Files .readAttributes (file .toPath (), BasicFileAttributes .class );
58+
59+ final Path filePath = ResourceUtils .loadFileResource (FILE_NAME );
60+
61+ final BasicFileAttributes attr = Files .readAttributes (filePath , BasicFileAttributes .class );
5662 basicHeader [0 ] = new BasicHeader (METADATA_PREFIX + MetadataKeyConstants .KEY_CREATION_TIME , String .valueOf (attr .creationTime ().toMillis ()));
5763 basicHeader [1 ] = new BasicHeader (METADATA_PREFIX + MetadataKeyConstants .KEY_ACCESS_TIME , String .valueOf (attr .lastAccessTime ().toMillis ()));
5864 basicHeader [2 ] = new BasicHeader (METADATA_PREFIX + MetadataKeyConstants .KEY_LAST_MODIFIED_TIME , String .valueOf (attr .lastModifiedTime ().toMillis ()));
5965 final Metadata metadata = genMetadata (basicHeader );
60- final WindowsMetadataRestore windowsMetadataRestore = new WindowsMetadataRestore (metadata , file . getPath (), MetaDataUtil .getOS ());
66+ final WindowsMetadataRestore windowsMetadataRestore = new WindowsMetadataRestore (metadata , filePath . toString (), MetaDataUtil .getOS ());
6167 windowsMetadataRestore .restoreFileTimes ();
62- final BasicFileAttributes fileAttributes = Files .readAttributes (file . toPath () , BasicFileAttributes .class );
68+ final BasicFileAttributes fileAttributes = Files .readAttributes (filePath , BasicFileAttributes .class );
6369 Assert .assertEquals (String .valueOf (fileAttributes .creationTime ().toMillis ()), String .valueOf (basicHeader [0 ].getValue ()));
6470 Assert .assertEquals (String .valueOf (fileAttributes .lastModifiedTime ().toMillis ()), String .valueOf (basicHeader [2 ].getValue ()));
6571 }
6672
6773
6874 @ Test
6975 public void restoreUserAndOwner_Test () throws Exception {
70- final ImmutableMap .Builder <String , String > mMetadataMap = new ImmutableMap .Builder <>();
71- final WindowsMetadataStore windowsMetadataStore = new WindowsMetadataStore (mMetadataMap );
76+ final ImmutableMap .Builder <String , String > metadataMap = new ImmutableMap .Builder <>();
77+ final WindowsMetadataStore windowsMetadataStore = new WindowsMetadataStore (metadataMap );
7278 final Class aClass = WindowsMetadataStore .class ;
7379 final Method method = aClass .getDeclaredMethod ("saveWindowsDescriptors" , new Class []{Path .class });
7480 method .setAccessible (true );
75- method .invoke (windowsMetadataStore , file .toPath ());
7681
77- final BasicHeader basicHeader [] = new BasicHeader [3 ];
78- basicHeader [0 ] = new BasicHeader (METADATA_PREFIX + KEY_OWNER , mMetadataMap .build ().get (METADATA_PREFIX + KEY_OWNER ));
79- basicHeader [1 ] = new BasicHeader (METADATA_PREFIX + KEY_GROUP , mMetadataMap .build ().get (METADATA_PREFIX + KEY_GROUP ));
80- basicHeader [2 ] = new BasicHeader (METADATA_PREFIX + MetadataKeyConstants .KEY_OS , localOS );
81- final Metadata metadata = genMetadata (basicHeader );
82- final WindowsMetadataRestore windowsMetadataRestore = new WindowsMetadataRestore (metadata , file .getPath (), MetaDataUtil .getOS ());
83- windowsMetadataRestore .restoreOSName ();
84- windowsMetadataRestore .restoreUserAndOwner ();
85-
86- final ImmutableMap .Builder <String , String > mMetadataMapAfterRestore = new ImmutableMap .Builder <>();
87- final WindowsMetadataStore windowsMetadataStoreAfterRestore = new WindowsMetadataStore (mMetadataMapAfterRestore );
88- final Class aClassAfterRestore = WindowsMetadataStore .class ;
89- final Method methodAfterRestore = aClassAfterRestore .getDeclaredMethod ("saveWindowsDescriptors" , new Class []{Path .class });
90- methodAfterRestore .setAccessible (true );
91- methodAfterRestore .invoke (windowsMetadataStoreAfterRestore , file .toPath ());
92-
93- Assert .assertEquals (mMetadataMapAfterRestore .build ().get (METADATA_PREFIX + KEY_OWNER ), basicHeader [0 ].getValue ());
94- Assert .assertEquals (mMetadataMapAfterRestore .build ().get (METADATA_PREFIX + KEY_GROUP ), basicHeader [1 ].getValue ());
82+ final String tempPathPrefix = null ;
83+ final Path tempDirectory = Files .createTempDirectory (Paths .get ("." ), tempPathPrefix );
84+
85+ final String fileName = "Gracie.txt" ;
86+
87+ try {
88+ final Path filePath = Files .createFile (Paths .get (tempDirectory .toString (), fileName ));
89+
90+ method .invoke (windowsMetadataStore , filePath );
91+
92+ final BasicHeader basicHeader [] = new BasicHeader [3 ];
93+ basicHeader [0 ] = new BasicHeader (METADATA_PREFIX + KEY_OWNER , metadataMap .build ().get (METADATA_PREFIX + KEY_OWNER ));
94+ basicHeader [1 ] = new BasicHeader (METADATA_PREFIX + KEY_GROUP , metadataMap .build ().get (METADATA_PREFIX + KEY_GROUP ));
95+ basicHeader [2 ] = new BasicHeader (METADATA_PREFIX + MetadataKeyConstants .KEY_OS , localOS );
96+ final Metadata metadata = genMetadata (basicHeader );
97+ final WindowsMetadataRestore windowsMetadataRestore = new WindowsMetadataRestore (metadata , filePath .toString (), MetaDataUtil .getOS ());
98+ windowsMetadataRestore .restoreOSName ();
99+ windowsMetadataRestore .restoreUserAndOwner ();
100+
101+ final ImmutableMap .Builder <String , String > mMetadataMapAfterRestore = new ImmutableMap .Builder <>();
102+ final WindowsMetadataStore windowsMetadataStoreAfterRestore = new WindowsMetadataStore (mMetadataMapAfterRestore );
103+ final Class aClassAfterRestore = WindowsMetadataStore .class ;
104+ final Method methodAfterRestore = aClassAfterRestore .getDeclaredMethod ("saveWindowsDescriptors" , new Class []{Path .class });
105+ methodAfterRestore .setAccessible (true );
106+ methodAfterRestore .invoke (windowsMetadataStoreAfterRestore , filePath );
107+
108+ Assert .assertEquals (mMetadataMapAfterRestore .build ().get (METADATA_PREFIX + KEY_OWNER ), basicHeader [0 ].getValue ());
109+ Assert .assertEquals (mMetadataMapAfterRestore .build ().get (METADATA_PREFIX + KEY_GROUP ), basicHeader [1 ].getValue ());
110+ } finally {
111+ FileUtils .deleteDirectory (tempDirectory .toFile ());
112+ }
95113 }
96114
97115
@@ -103,6 +121,9 @@ public void restorePermissions_Test() {
103121 final Class aClass = WindowsMetadataStore .class ;
104122 final Method method = aClass .getDeclaredMethod ("saveFlagMetaData" , new Class []{Path .class });
105123 method .setAccessible (true );
124+
125+ final File file = ResourceUtils .loadFileResource (FILE_NAME ).toFile ();
126+
106127 method .invoke (windowsMetadataStore , file .toPath ());
107128
108129 final Method methodWindowsfilePermissions = aClass .getDeclaredMethod ("saveWindowsfilePermissions" , new Class []{Path .class });
@@ -130,7 +151,6 @@ public void restorePermissions_Test() {
130151
131152
132153 private Metadata genMetadata (final Header ... headers ) {
133-
134154 final ImmutableMultimap .Builder <String , String > mapBuilder = ImmutableMultimap .builder ();
135155 for (final Header header : headers ) {
136156 mapBuilder .put (header .getName (), header .getValue ());
0 commit comments