Statistics
| Branch: | Revision:

root / trunk / Pithos.Core.Test / MockStatusKeeper.cs @ 0a9d4d18

History | View | Annotate | Download (7 kB)

1 d78cbf09 Panagiotis Kanavos
using System;
2 b5061ac8 Panagiotis Kanavos
using System.Collections.Concurrent;
3 d78cbf09 Panagiotis Kanavos
using System.Collections.Generic;
4 d78cbf09 Panagiotis Kanavos
using System.Diagnostics.Contracts;
5 0af3141d Panagiotis Kanavos
using System.IO;
6 d78cbf09 Panagiotis Kanavos
using System.Linq;
7 d78cbf09 Panagiotis Kanavos
using System.Text;
8 3c43ec9b Panagiotis Kanavos
using System.Threading;
9 174bbb6e Panagiotis Kanavos
using System.Threading.Tasks;
10 d78cbf09 Panagiotis Kanavos
using Pithos.Interfaces;
11 5ce54458 Panagiotis Kanavos
using Pithos.Network;
12 d78cbf09 Panagiotis Kanavos
13 d78cbf09 Panagiotis Kanavos
namespace Pithos.Core.Test
14 d78cbf09 Panagiotis Kanavos
{
15 d78cbf09 Panagiotis Kanavos
    public class MockStatusChecker : IStatusChecker, IStatusKeeper
16 d78cbf09 Panagiotis Kanavos
    {
17 d78cbf09 Panagiotis Kanavos
        public IPithosSettings Settings { get; set; }
18 d78cbf09 Panagiotis Kanavos
19 d78cbf09 Panagiotis Kanavos
        private readonly string[] _states = { "Normal", "Modified", "Conflict", "Synch" };
20 d78cbf09 Panagiotis Kanavos
21 5e31048f Panagiotis Kanavos
        readonly ConcurrentDictionary<string, FileOverlayStatus> _overlayCache = new ConcurrentDictionary<string, FileOverlayStatus>();
22 5e31048f Panagiotis Kanavos
        readonly ConcurrentDictionary<string, FileStatus> _statusCache = new ConcurrentDictionary<string, FileStatus>();
23 5e31048f Panagiotis Kanavos
        readonly ConcurrentDictionary<string, string> _checksums = new ConcurrentDictionary<string, string>();
24 d78cbf09 Panagiotis Kanavos
25 d78cbf09 Panagiotis Kanavos
        public FileOverlayStatus GetFileOverlayStatus(string path)
26 d78cbf09 Panagiotis Kanavos
        {
27 5e31048f Panagiotis Kanavos
            
28 d78cbf09 Panagiotis Kanavos
            if (!_overlayCache.ContainsKey(path))
29 b5061ac8 Panagiotis Kanavos
                return FileOverlayStatus.Unversioned;
30 d78cbf09 Panagiotis Kanavos
31 d78cbf09 Panagiotis Kanavos
            var pithosPath = Settings.PithosPath;
32 d78cbf09 Panagiotis Kanavos
            if (path.StartsWith(pithosPath, true, null))
33 d78cbf09 Panagiotis Kanavos
            {
34 d78cbf09 Panagiotis Kanavos
                var status = _overlayCache[path];
35 d78cbf09 Panagiotis Kanavos
                return status;
36 d78cbf09 Panagiotis Kanavos
            }
37 b5061ac8 Panagiotis Kanavos
            return FileOverlayStatus.Unversioned;
38 b5061ac8 Panagiotis Kanavos
        }
39 b5061ac8 Panagiotis Kanavos
40 0af3141d Panagiotis Kanavos
        public void ProcessExistingFiles(IEnumerable<FileInfo> paths)
41 b5061ac8 Panagiotis Kanavos
        {
42 b5061ac8 Panagiotis Kanavos
43 b5061ac8 Panagiotis Kanavos
            var newFiles = (from file in paths
44 0af3141d Panagiotis Kanavos
                            where !_overlayCache.ContainsKey(file.FullName)
45 b5061ac8 Panagiotis Kanavos
                            select new
46 b5061ac8 Panagiotis Kanavos
                            {
47 0af3141d Panagiotis Kanavos
                                FilePath = file.FullName.ToLower(),
48 b5061ac8 Panagiotis Kanavos
                                OverlayStatus = FileOverlayStatus.Unversioned,
49 b5061ac8 Panagiotis Kanavos
                                FileStatus = FileStatus.Created,
50 9c4346c9 Panagiotis Kanavos
                                Checksum = Signature.CalculateMD5(file)
51 b5061ac8 Panagiotis Kanavos
                            });
52 b5061ac8 Panagiotis Kanavos
            var files = new ConcurrentBag<string>();
53 0af3141d Panagiotis Kanavos
            foreach (var state in newFiles)
54 0af3141d Panagiotis Kanavos
            {            
55 b5061ac8 Panagiotis Kanavos
                _overlayCache[state.FilePath] = state.OverlayStatus;
56 b5061ac8 Panagiotis Kanavos
                _statusCache[state.FilePath] = state.FileStatus;
57 b5061ac8 Panagiotis Kanavos
                _checksums[state.FilePath] = state.Checksum;
58 b5061ac8 Panagiotis Kanavos
                files.Add(state.FilePath);
59 0af3141d Panagiotis Kanavos
            }            
60 b5061ac8 Panagiotis Kanavos
            
61 d78cbf09 Panagiotis Kanavos
        }
62 d78cbf09 Panagiotis Kanavos
63 0eea575a Panagiotis Kanavos
        public void Stop()
64 0eea575a Panagiotis Kanavos
        {
65 0eea575a Panagiotis Kanavos
            throw new NotImplementedException();
66 0eea575a Panagiotis Kanavos
        }
67 0eea575a Panagiotis Kanavos
68 0a9d4d18 pkanavos
        public void SetFileState(string path, FileStatus fileStatus, FileOverlayStatus overlayStatus, string localFileMissingFromServer)
69 283809f3 Panagiotis Kanavos
        {
70 283809f3 Panagiotis Kanavos
            if (String.IsNullOrWhiteSpace(path))
71 283809f3 Panagiotis Kanavos
                throw new ArgumentNullException("path", "path can't be empty");
72 283809f3 Panagiotis Kanavos
            SetFileStatus(path, fileStatus);
73 283809f3 Panagiotis Kanavos
            SetFileOverlayStatus(path, overlayStatus);
74 283809f3 Panagiotis Kanavos
        }
75 283809f3 Panagiotis Kanavos
76 283809f3 Panagiotis Kanavos
        public void StoreInfo(string path, ObjectInfo objectInfo)
77 283809f3 Panagiotis Kanavos
        {
78 283809f3 Panagiotis Kanavos
            if (String.IsNullOrWhiteSpace(path))
79 283809f3 Panagiotis Kanavos
                throw new ArgumentNullException("path", "path can't be empty");
80 283809f3 Panagiotis Kanavos
            if (objectInfo == null)
81 283809f3 Panagiotis Kanavos
                throw new ArgumentNullException("objectInfo", "objectInfo can't be empty");
82 283809f3 Panagiotis Kanavos
83 283809f3 Panagiotis Kanavos
            _statusCache[path] = FileStatus.Unchanged;
84 283809f3 Panagiotis Kanavos
            _overlayCache[path] = FileOverlayStatus.Normal;
85 283809f3 Panagiotis Kanavos
            _checksums[path] = objectInfo.Hash;
86 283809f3 Panagiotis Kanavos
87 283809f3 Panagiotis Kanavos
88 283809f3 Panagiotis Kanavos
        }
89 283809f3 Panagiotis Kanavos
90 283809f3 Panagiotis Kanavos
        public T GetStatus<T>(string path, Func<FileState, T> getter, T defaultValue)
91 283809f3 Panagiotis Kanavos
        {
92 283809f3 Panagiotis Kanavos
            throw new NotImplementedException();
93 283809f3 Panagiotis Kanavos
        }
94 283809f3 Panagiotis Kanavos
95 283809f3 Panagiotis Kanavos
        public void SetStatus(string path, Action<FileState> setter)
96 283809f3 Panagiotis Kanavos
        {
97 283809f3 Panagiotis Kanavos
            throw new NotImplementedException();
98 283809f3 Panagiotis Kanavos
        }
99 283809f3 Panagiotis Kanavos
100 5ce54458 Panagiotis Kanavos
        ConcurrentDictionary<string, NetworkOperation> _networkState = new ConcurrentDictionary<string, NetworkOperation>();
101 283809f3 Panagiotis Kanavos
102 283809f3 Panagiotis Kanavos
103 5ce54458 Panagiotis Kanavos
        public void SetNetworkState(string path, NetworkOperation operation)
104 283809f3 Panagiotis Kanavos
        {
105 5ce54458 Panagiotis Kanavos
            _networkState[path.ToLower()] = operation;
106 283809f3 Panagiotis Kanavos
            //Removing may fail so we store the "None" value anyway
107 5ce54458 Panagiotis Kanavos
            if (operation == NetworkOperation.None)
108 283809f3 Panagiotis Kanavos
            {
109 5ce54458 Panagiotis Kanavos
                NetworkOperation oldOperation;
110 5ce54458 Panagiotis Kanavos
                _networkState.TryRemove(path, out oldOperation);
111 283809f3 Panagiotis Kanavos
            }
112 283809f3 Panagiotis Kanavos
        }
113 283809f3 Panagiotis Kanavos
114 5ce54458 Panagiotis Kanavos
        public NetworkOperation GetNetworkState(string path)
115 283809f3 Panagiotis Kanavos
        {
116 5ce54458 Panagiotis Kanavos
            NetworkOperation operation;
117 5ce54458 Panagiotis Kanavos
            if (_networkState.TryGetValue(path, out operation))
118 5ce54458 Panagiotis Kanavos
                return operation;
119 5ce54458 Panagiotis Kanavos
            return NetworkOperation.None;
120 283809f3 Panagiotis Kanavos
        }
121 283809f3 Panagiotis Kanavos
122 3c43ec9b Panagiotis Kanavos
        public void StartProcessing(CancellationToken token)
123 3c43ec9b Panagiotis Kanavos
        {
124 3c43ec9b Panagiotis Kanavos
            
125 3c43ec9b Panagiotis Kanavos
        }
126 3c43ec9b Panagiotis Kanavos
127 9c4346c9 Panagiotis Kanavos
        public string BlockHash { get; set; }
128 9c4346c9 Panagiotis Kanavos
129 5ce54458 Panagiotis Kanavos
        public int BlockSize { get; set; }
130 5120f3cb Panagiotis Kanavos
        public void ChangeRoots(string oldPath, string newPath)
131 5120f3cb Panagiotis Kanavos
        {
132 5120f3cb Panagiotis Kanavos
            throw new NotImplementedException();
133 5120f3cb Panagiotis Kanavos
        }
134 5ce54458 Panagiotis Kanavos
135 039a89e5 Panagiotis Kanavos
        public FileState GetStateByFilePath(string path)
136 039a89e5 Panagiotis Kanavos
        {
137 039a89e5 Panagiotis Kanavos
            throw new NotImplementedException();
138 039a89e5 Panagiotis Kanavos
        }
139 039a89e5 Panagiotis Kanavos
140 3c76f045 Panagiotis Kanavos
        public void ClearFolderStatus(string path)
141 3c76f045 Panagiotis Kanavos
        {
142 3c76f045 Panagiotis Kanavos
            throw new NotImplementedException();
143 3c76f045 Panagiotis Kanavos
        }
144 3c76f045 Panagiotis Kanavos
145 3c76f045 Panagiotis Kanavos
        public IEnumerable<FileState> GetChildren(FileState fileState)
146 3c76f045 Panagiotis Kanavos
        {
147 3c76f045 Panagiotis Kanavos
            throw new NotImplementedException();
148 3c76f045 Panagiotis Kanavos
        }
149 3c76f045 Panagiotis Kanavos
150 174bbb6e Panagiotis Kanavos
        public void EnsureFileState(string path)
151 174bbb6e Panagiotis Kanavos
        {
152 174bbb6e Panagiotis Kanavos
            throw new NotImplementedException();
153 174bbb6e Panagiotis Kanavos
        }
154 174bbb6e Panagiotis Kanavos
155 5bcf6d70 Panagiotis Kanavos
156 5bcf6d70 Panagiotis Kanavos
        private PithosStatus _pithosStatus = PithosStatus.InSynch;
157 5bcf6d70 Panagiotis Kanavos
        public void SetPithosStatus(PithosStatus status)
158 5bcf6d70 Panagiotis Kanavos
        {
159 5bcf6d70 Panagiotis Kanavos
            _pithosStatus = status;
160 5bcf6d70 Panagiotis Kanavos
        }
161 5bcf6d70 Panagiotis Kanavos
162 d78cbf09 Panagiotis Kanavos
        public PithosStatus GetPithosStatus()
163 d78cbf09 Panagiotis Kanavos
        {
164 5bcf6d70 Panagiotis Kanavos
            return _pithosStatus;
165 d78cbf09 Panagiotis Kanavos
        }
166 d78cbf09 Panagiotis Kanavos
167 174bbb6e Panagiotis Kanavos
        public Task SetFileOverlayStatus(string path, FileOverlayStatus overlayStatus, string shortHash = null)
168 d78cbf09 Panagiotis Kanavos
        {
169 d78cbf09 Panagiotis Kanavos
            _overlayCache[path] = overlayStatus;
170 174bbb6e Panagiotis Kanavos
            return Task.Factory.StartNew(()=>{});
171 d78cbf09 Panagiotis Kanavos
        }
172 d78cbf09 Panagiotis Kanavos
173 d78cbf09 Panagiotis Kanavos
        public void RemoveFileOverlayStatus(string path)
174 d78cbf09 Panagiotis Kanavos
        {
175 b5061ac8 Panagiotis Kanavos
            FileOverlayStatus value;
176 b5061ac8 Panagiotis Kanavos
            _overlayCache.TryRemove(path, out value);
177 d78cbf09 Panagiotis Kanavos
        }
178 d78cbf09 Panagiotis Kanavos
179 d78cbf09 Panagiotis Kanavos
        public void RenameFileOverlayStatus(string oldPath, string newPath)
180 d78cbf09 Panagiotis Kanavos
        {
181 d78cbf09 Panagiotis Kanavos
            var status = _overlayCache[oldPath];
182 d78cbf09 Panagiotis Kanavos
            _overlayCache[newPath] = status;
183 b5061ac8 Panagiotis Kanavos
            FileOverlayStatus value;
184 b5061ac8 Panagiotis Kanavos
            _overlayCache.TryRemove(oldPath, out value);
185 d78cbf09 Panagiotis Kanavos
        }
186 d78cbf09 Panagiotis Kanavos
187 174bbb6e Panagiotis Kanavos
        public void UpdateFileChecksum(string path, string shortHash, string checksum)
188 d78cbf09 Panagiotis Kanavos
        {
189 d78cbf09 Panagiotis Kanavos
            _checksums[path] = checksum;
190 d78cbf09 Panagiotis Kanavos
        }
191 d78cbf09 Panagiotis Kanavos
192 d78cbf09 Panagiotis Kanavos
        public void SetFileStatus(string path, FileStatus status)
193 d78cbf09 Panagiotis Kanavos
        {
194 d78cbf09 Panagiotis Kanavos
            _statusCache[path] = status;
195 d78cbf09 Panagiotis Kanavos
        }
196 d78cbf09 Panagiotis Kanavos
197 d78cbf09 Panagiotis Kanavos
        public FileStatus GetFileStatus(string path)
198 d78cbf09 Panagiotis Kanavos
        {
199 d78cbf09 Panagiotis Kanavos
            if (!_statusCache.ContainsKey(path))
200 d78cbf09 Panagiotis Kanavos
                return FileStatus.Missing;
201 d78cbf09 Panagiotis Kanavos
            return _statusCache[path];
202 d78cbf09 Panagiotis Kanavos
        }
203 d78cbf09 Panagiotis Kanavos
204 d78cbf09 Panagiotis Kanavos
        public void ClearFileStatus(string path)
205 d78cbf09 Panagiotis Kanavos
        {
206 b5061ac8 Panagiotis Kanavos
            FileStatus value;
207 b5061ac8 Panagiotis Kanavos
            _statusCache.TryRemove(path,out value);
208 d78cbf09 Panagiotis Kanavos
        }
209 bc27bb7e Panagiotis Kanavos
210 bc27bb7e Panagiotis Kanavos
211 bc27bb7e Panagiotis Kanavos
        public void CleanupStaleStates(AccountInfo accountInfo, List<ObjectInfo> objectInfos)
212 bc27bb7e Panagiotis Kanavos
        {
213 bc27bb7e Panagiotis Kanavos
            //throw new NotImplementedException();
214 bc27bb7e Panagiotis Kanavos
        }
215 bc27bb7e Panagiotis Kanavos
216 bc27bb7e Panagiotis Kanavos
217 bc27bb7e Panagiotis Kanavos
        public void CleanupOrphanStates()
218 bc27bb7e Panagiotis Kanavos
        {
219 bc27bb7e Panagiotis Kanavos
            throw new NotImplementedException();
220 bc27bb7e Panagiotis Kanavos
        }
221 d78cbf09 Panagiotis Kanavos
    }
222 d78cbf09 Panagiotis Kanavos
}