|
@ -1,12 +1,24 @@ |
|
|
package seaweedfs.client; |
|
|
package seaweedfs.client; |
|
|
|
|
|
|
|
|
|
|
|
import com.google.protobuf.ByteString; |
|
|
|
|
|
import java.awt.image.DataBuffer; |
|
|
|
|
|
import java.io.ByteArrayInputStream; |
|
|
|
|
|
import java.io.IOException; |
|
|
|
|
|
import java.util.HashMap; |
|
|
|
|
|
import java.util.HashSet; |
|
|
import java.util.List; |
|
|
import java.util.List; |
|
|
|
|
|
import java.util.Map; |
|
|
|
|
|
import java.util.Set; |
|
|
|
|
|
import java.util.concurrent.atomic.AtomicLong; |
|
|
|
|
|
import org.junit.Assert; |
|
|
|
|
|
import org.junit.Test; |
|
|
|
|
|
import seaweedfs.client.FilerProto.Entry; |
|
|
|
|
|
import seaweedfs.client.FilerProto.FuseAttributes; |
|
|
|
|
|
|
|
|
public class SeaweedFilerTest { |
|
|
public class SeaweedFilerTest { |
|
|
|
|
|
private static FilerClient filerClient = new FilerClient("localhost", 18888); |
|
|
public static void main(String[] args){ |
|
|
public static void main(String[] args){ |
|
|
|
|
|
|
|
|
FilerClient filerClient = new FilerClient("localhost", 18888); |
|
|
|
|
|
|
|
|
|
|
|
List<FilerProto.Entry> entries = filerClient.listEntries("/"); |
|
|
List<FilerProto.Entry> entries = filerClient.listEntries("/"); |
|
|
|
|
|
|
|
|
for (FilerProto.Entry entry : entries) { |
|
|
for (FilerProto.Entry entry : entries) { |
|
@ -29,4 +41,49 @@ public class SeaweedFilerTest { |
|
|
System.out.println("/ should exists"); |
|
|
System.out.println("/ should exists"); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
|
public void testExtendedKey() throws IOException { |
|
|
|
|
|
String content = "hello"; |
|
|
|
|
|
String location = "/hello.txt"; |
|
|
|
|
|
HashMap<String, String> metadata = new HashMap<>(); |
|
|
|
|
|
// The storage format of key is Seaweed-mime, and the reading format is mime. |
|
|
|
|
|
metadata.put("mime", "text/plain"); |
|
|
|
|
|
// The user-specified key "Seaweed-" prefix does not take effect |
|
|
|
|
|
// The storage format of key is Seaweed-name1, and the reading format is name1 |
|
|
|
|
|
metadata.put("Seaweed-name1", "value1"); |
|
|
|
|
|
|
|
|
|
|
|
long ts = System.currentTimeMillis() / 1000; |
|
|
|
|
|
String dir = SeaweedOutputStream.getParentDirectory(location); |
|
|
|
|
|
String name = SeaweedOutputStream.getFileName(location); |
|
|
|
|
|
FuseAttributes.Builder attributes = FuseAttributes.newBuilder() |
|
|
|
|
|
.setMtime(ts) |
|
|
|
|
|
.setCrtime(ts) |
|
|
|
|
|
.setFileMode(755); |
|
|
|
|
|
Entry.Builder entry = Entry.newBuilder() |
|
|
|
|
|
.setName(name) |
|
|
|
|
|
.setIsDirectory(false) |
|
|
|
|
|
.setAttributes(attributes.build()); |
|
|
|
|
|
// put metadata |
|
|
|
|
|
for (Map.Entry<String, String> metadataEntry : metadata.entrySet()) { |
|
|
|
|
|
entry.putExtended(metadataEntry.getKey(), |
|
|
|
|
|
ByteString.copyFromUtf8(metadataEntry.getValue())); |
|
|
|
|
|
} |
|
|
|
|
|
try (SeaweedOutputStream outputStream = new SeaweedOutputStream(filerClient, location, entry, 0, |
|
|
|
|
|
1024, "")) { |
|
|
|
|
|
outputStream.write(content.getBytes()); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Entry getEntry = filerClient.lookupEntry(dir, name); |
|
|
|
|
|
Assert.assertNotNull(getEntry); |
|
|
|
|
|
Map<String, ByteString> extendedMap = getEntry.getExtendedMap(); |
|
|
|
|
|
HashSet<String> expectKeys = new HashSet<String>() {{ |
|
|
|
|
|
add("mime"); |
|
|
|
|
|
add("name1"); |
|
|
|
|
|
}}; |
|
|
|
|
|
Assert.assertEquals(expectKeys, extendedMap.keySet()); |
|
|
|
|
|
|
|
|
|
|
|
filerClient.deleteEntry(dir, name, true, false, true); |
|
|
|
|
|
} |
|
|
} |
|
|
} |