Added check for nonexistent file before updating checksum
[pithos-ms-client] / trunk / Pithos.Network.Test / ObjectInfoTest.cs
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using NUnit.Framework;
6 using Newtonsoft.Json;
7 using Newtonsoft.Json.Linq;
8 using Pithos.Interfaces;
9
10 namespace Pithos.Network.Test
11 {
12     [TestFixture]
13     class ObjectInfoTest
14     {
15         [Test]
16         public void RelativeUrlToFilePath()
17         {
18
19             var info1 = new ObjectInfo {Account = "pkanavos", Container = "pithos", Name = "somefolder/file1.txt"};
20             var path1=info1.RelativeUrlToFilePath("PKANAVOS");
21             Assert.AreEqual(@"pithos\somefolder\file1.txt",path1);
22             var path2 = info1.RelativeUrlToFilePath("user1");
23             Assert.AreEqual(@"others-shared\pkanavos\pithos\somefolder\file1.txt", path2);
24             var info3 = new ObjectInfo { Account = "pkanavos", Name = "somefolder/file1.txt" };
25             var path3 = info1.RelativeUrlToFilePath("PKANAVOS");
26             Assert.AreEqual(@"pithos\somefolder\file1.txt", path1);
27
28         }
29
30
31         [Test]
32         public void TestDeserialization()
33         {
34             var content="[{\"x_object_meta_smoe\": \"true\", \"hash\": \"0f5fbd63a50cb19c13eb111d3c3a7e40\", \"name\": \"wlsetup-web.exe\", \"x_object_meta_moe\": \"true\", \"x_object_meta_joe\": \"true\", \"x_object_sharing\": \"read=lumumba;write=pkanavos,fufutos\", \"x_object_version_timestamp\": \"1319572542.348810\", \"bytes\": 1286504, \"last_modified\": \"2011-10-25T19:55:42.348810+00:00\", \"content_type\": \"application/octet-stream\", \"x_object_version\": 22075, \"x_object_modified_by\": \"890329@vho.grnet.gr\"}]";
35             var infos=JsonConvert.DeserializeObject<IList<ObjectInfo>>(content);
36             var info = infos[0];
37             
38             Assert.IsNotEmpty(info.Tags);
39             Assert.IsNotEmpty(info.Permissions);
40             Assert.AreEqual(3,info.Permissions.Count);
41             Assert.IsTrue(info.Permissions["pkanavos"]=="write");
42             Assert.IsTrue(info.Permissions["lumumba"] == "read");
43             Assert.IsTrue(info.Permissions["fufutos"] == "write");
44             Assert.IsTrue(info.Tags.ContainsKey("x_object_meta_smoe"));
45         }
46
47         [Test]
48         public void ParseInfo()
49         {
50
51             var account = "890329@vho.grnet.gr";
52             var apiKey = "pvCJNuf28+K2UjWnSTlfVQ==";
53             
54             var client = new CloudFilesClient(account, apiKey)
55             {
56                 AuthenticationUrl = @"https://pithos.dev.grnet.gr",
57                 UsePithos = true
58             };
59             client.Authenticate();
60             var fileName = @"wlsetup-web.exe";
61
62             var infos=client.ListObjects(account, "pithos");
63             var info = infos.First(i=> i.Name == fileName);
64             Assert.IsNotEmpty(info.Tags);
65
66         }
67
68         [Test]
69         public void TestGetPermissions()
70         {
71             ObjectInfo objectInfo=new ObjectInfo();
72             objectInfo.Permissions["user1"] = "read";
73             objectInfo.Permissions["user2"] = "write";
74
75             var permissionString = objectInfo.GetPermissionString();
76
77             Assert.IsNotNullOrEmpty(permissionString);
78             Assert.AreEqual("read=user1;write=user2",Uri.UnescapeDataString(permissionString));
79         }
80
81         [Test]
82         public void TestSetPermissions()
83         {
84             var objectInfo=new ObjectInfo();
85
86             var permissionString = "read=user1;write=user2,user3@somehost.gr";
87             
88             objectInfo.SetPermissions(permissionString);
89             
90             Assert.AreEqual(3,objectInfo.Permissions.Count);
91             Assert.IsTrue(objectInfo.Permissions.ContainsKey("user1"));
92             Assert.IsTrue(objectInfo.Permissions.ContainsKey("user2"));
93             Assert.IsTrue(objectInfo.Permissions.ContainsKey("user3@somehost.gr"));
94             Assert.IsTrue(objectInfo.Permissions["user1"]=="read");
95             Assert.IsTrue(objectInfo.Permissions["user2"]=="write");
96             Assert.IsTrue(objectInfo.Permissions["user3@somehost.gr"]=="write");
97
98         }
99
100         [Test]
101         public void empty_should_be_writable()
102         {
103             Assert.That(ObjectInfo.Empty.IsWritable("somAccount"),Is.True);
104         }
105
106         [Test]
107         public void should_be_writeable_for_write_permission()
108         {
109             var objectInfo = new ObjectInfo();
110             var permissionString = "read=user1;write=user2,user3@somehost.gr";
111             objectInfo.SetPermissions(permissionString);
112
113             Assert.That(objectInfo.IsWritable("user3@somehost.gr"),Is.True);
114
115         }
116
117         [Test]
118         public void should_not_be_writeable_for_read_permission()
119         {
120             var objectInfo = new ObjectInfo();
121             var permissionString = "read=user1;write=user2,user3@somehost.gr";
122             objectInfo.SetPermissions(permissionString);
123
124             Assert.That(objectInfo.IsWritable("user1"),Is.False);
125
126         }
127
128         [Test]
129         public void should_not_be_writeable_for_allowed()
130         {
131             var objectInfo = new ObjectInfo{AllowedTo="write"};
132             var permissionString = "read=user1;write=user2,user3@somehost.gr";
133             objectInfo.SetPermissions(permissionString);
134
135             Assert.That(objectInfo.IsWritable("user4"),Is.True);
136
137         }
138     }
139 }