Statistics
| Branch: | Revision:

root / trunk / Pithos.Core.Test / MockStatusKeeper.cs @ 5e31048f

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