Example #1
0
        public void CreateVersion(Version version)
        {
            if (version == null)
                throw new ArgumentNullException("version", "Version cannot be null.");
            if (version.AppKey == Guid.Empty)
                throw new ArgumentException("App key cannot be empty.", "version.AppKey");

            try
            {
                using (var client = new AmazonS3Client(Context.AwsAccessKeyId, Context.AwsSecretAccessKey))
                {
                    var appsController = new Apps(Context);
                    var app = appsController.GetApp(version.AppKey);
                    version.GroupKey = app.GroupKey;

                    var indexesController = new Internal.Indexes(Context);

                    using (var stream = version.Serialise())
                    {
                        string indexPath = GetAppVersionsIndexPath(version.AppKey);
                        var index = indexesController.LoadIndex(indexPath);
                        if (index.Entries.Any(e => e.Key == version.Key))
                        {
                            throw new DeploymentException("Index already contains entry for given key!");
                        }

                        using (var putResponse = client.PutObject(new PutObjectRequest()
                        {
                            BucketName = Context.BucketName,
                            Key = string.Format("{0}/{1}/{2}", STR_VERSIONS_CONTAINER_PATH, version.Key.ToString("N"), STR_INFO_FILE_NAME),
                            InputStream = stream,
                        })) { }

                        index.Entries.Add(new Internal.EntityIndexEntry() { Key = version.Key, Name = CreateVersionIndexName(version) });
                        Internal.Indexes.NameSortIndex(index, true);
                        indexesController.UpdateIndex(indexPath, index);
                    }
                }
            }
            catch (AmazonS3Exception awsEx)
            {
                throw new DeploymentException("Failed creating version.", awsEx);
            }
            catch (Exception ex)
            {
                throw new DeploymentException("Failed creating version.", ex);
            }
        }
Example #2
0
        private static void Searching(Guid groupKey, Apps appsController, App createdApp)
        {
            var aSecondApp = new App() { Name = "A Second Group", GroupKey = groupKey, DeploymentDirectory = "ASecondGroup" };
            appsController.CreateApp(aSecondApp);
            var zThirdApp = new App() { Name = "Z Third Group", GroupKey = groupKey, DeploymentDirectory = "ZThirdGroup" };
            appsController.CreateApp(zThirdApp);

            var search1 = appsController.SearchGroupApps(groupKey);
            Debug.Assert(search1.TotalCount == 3);
            Debug.Assert(search1.Apps.Count() == 3);
            Debug.Assert(search1.Apps.ElementAt(0).Key == aSecondApp.Key);
            Debug.Assert(search1.Apps.ElementAt(1).Key == createdApp.Key);
            Debug.Assert(search1.Apps.ElementAt(2).Key == zThirdApp.Key);

            var search2 = appsController.SearchGroupApps(groupKey, "Updated");
            Debug.Assert(search2.TotalCount == 1);
            Debug.Assert(search2.Apps.Count() == 1);
            Debug.Assert(search2.Apps.ElementAt(0).Key == createdApp.Key);

            var search3 = appsController.SearchGroupApps(groupKey, pageSize: 1);
            Debug.Assert(search3.TotalCount == 3);
            Debug.Assert(search3.Apps.Count() == 1);
            Debug.Assert(search3.Apps.ElementAt(0).Key == aSecondApp.Key);

            var search4 = appsController.SearchGroupApps(groupKey, pageSize: 2);
            Debug.Assert(search4.TotalCount == 3);
            Debug.Assert(search4.Apps.Count() == 2);
            Debug.Assert(search4.Apps.ElementAt(0).Key == aSecondApp.Key);
            Debug.Assert(search4.Apps.ElementAt(1).Key == createdApp.Key);

            var search5 = appsController.SearchGroupApps(groupKey, offset: 1);
            Debug.Assert(search5.TotalCount == 3);
            Debug.Assert(search5.Apps.Count() == 2);
            Debug.Assert(search5.Apps.ElementAt(0).Key == createdApp.Key);
            Debug.Assert(search5.Apps.ElementAt(1).Key == zThirdApp.Key);

            var search6 = appsController.SearchGroupApps(groupKey, offset: 1, pageSize: 1);
            Debug.Assert(search6.TotalCount == 3);
            Debug.Assert(search6.Apps.Count() == 1);
            Debug.Assert(search6.Apps.ElementAt(0).Key == createdApp.Key);

            appsController.DeleteApp(aSecondApp.Key);
            appsController.DeleteApp(zThirdApp.Key);
        }
Example #3
0
        public static App Run(ControllerConfiguration context, Guid groupKey)
        {
            var appsController = new Apps(context);

            var searchEmpty = appsController.SearchGroupApps(groupKey);
            Debug.Assert(searchEmpty.TotalCount == 0);
            Debug.Assert(searchEmpty.Apps.Count() == 0);

            var testApp = new App() { Name = "Test App", GroupKey = groupKey, DeploymentDirectory = "TestApp" };
            appsController.CreateApp(testApp);
            var createdApp = appsController.GetApp(testApp.Key);
            Debug.Assert(createdApp.Name == testApp.Name);
            Debug.Assert(createdApp.GroupKey == testApp.GroupKey);

            var searchSingle = appsController.SearchGroupApps(groupKey);
            Debug.Assert(searchSingle.TotalCount == 1);
            Debug.Assert(searchSingle.Apps.Count() == 1);
            Debug.Assert(searchSingle.Apps.First().Key == createdApp.Key);
            Debug.Assert(searchSingle.Apps.First().Name == createdApp.Name);

            createdApp.Tags.Add("Foo", "Bar");
            appsController.UpdateApp(createdApp);

            var taggedApp = appsController.GetApp(testApp.Key);
            Debug.Assert(taggedApp.GroupKey == createdApp.GroupKey);
            Debug.Assert(taggedApp.Tags.ContainsKey("Foo"));
            Debug.Assert(taggedApp.Tags["Foo"] == "Bar");
            var searchUpdated = appsController.SearchGroupApps(groupKey);
            Debug.Assert(searchUpdated.TotalCount == 1);
            Debug.Assert(searchUpdated.Apps.Count() == 1);
            Debug.Assert(searchUpdated.Apps.First().Key == createdApp.Key);
            Debug.Assert(searchUpdated.Apps.First().Name == createdApp.Name);

            taggedApp.Name = "Updated Test App";
            appsController.UpdateApp(taggedApp);

            var renamedApp = appsController.GetApp(testApp.Key);
            Debug.Assert(renamedApp.Name == taggedApp.Name);
            Debug.Assert(renamedApp.GroupKey == taggedApp.GroupKey);
            var searchRenamed = appsController.SearchGroupApps(groupKey);
            Debug.Assert(searchRenamed.TotalCount == 1);
            Debug.Assert(searchRenamed.Apps.Count() == 1);
            Debug.Assert(searchRenamed.Apps.First().Key == taggedApp.Key);
            Debug.Assert(searchRenamed.Apps.First().Name == taggedApp.Name);

            Searching(groupKey, appsController, createdApp);

            var searchDeleted = appsController.SearchGroupApps(groupKey);
            Debug.Assert(searchDeleted.TotalCount == 1);
            Debug.Assert(searchDeleted.Apps.Count() == 1);
            Debug.Assert(searchDeleted.Apps.First().Key == taggedApp.Key);
            Debug.Assert(searchDeleted.Apps.First().Name == taggedApp.Name);

            appsController.UpdateApp(testApp);
            var searchReset = appsController.SearchGroupApps(groupKey);
            Debug.Assert(searchReset.TotalCount == 1);
            Debug.Assert(searchReset.Apps.Count() == 1);
            Debug.Assert(searchReset.Apps.First().Key == testApp.Key);
            Debug.Assert(searchReset.Apps.First().Name == testApp.Name);

            // Create default test apps.
            appsController.CreateApp(new App() { Key = new Guid("8b245840-96be-4c9b-889e-06985fc63498"), GroupKey = new Guid("5615c002-2d9a-46c4-a9a3-26b2b19cd790"), Name = "Plywood Toolkit", DeploymentDirectory = "PlywoodToolkit", MajorVersion = "0.1", Revision = 11 });
            appsController.CreateApp(new App() { Key = new Guid("6eaf852b-5b91-4ce6-9e74-ce57ee2aef9d"), GroupKey = new Guid("5615c002-2d9a-46c4-a9a3-26b2b19cd790"), Name = "Sawmill Test", DeploymentDirectory = "SawmillTest", MajorVersion = "0.1", Revision = 1 });

            return testApp;
        }
Example #4
0
        public TargetAppList SearchTargetApps(Guid targetKey, string query = null, int offset = 0, int pageSize = 50)
        {
            try
            {
                var indexes = new Indexes(Context);
                var targets = new Targets(Context);
                var apps = new Apps(Context);
                var index = indexes.LoadIndex(GetTargetAppsIndexPath(targetKey));
                var target = targets.GetTarget(targetKey);
                var groupAppIndex = indexes.LoadIndex(Apps.GetGroupAppsIndexPath(target.GroupKey));

                var filteredIndex = index.Entries.AsQueryable();

                if (!string.IsNullOrWhiteSpace(query))
                {
                    var queryParts = query.ToLower().Split(new char[] { ' ', '\t', ',' }).Where(qp => !string.IsNullOrWhiteSpace(qp)).ToArray();
                    filteredIndex = filteredIndex.Where(e => queryParts.Any(q => e.Name.ToLower().Contains(q)));
                }

                var count = filteredIndex.Count();

                var listItems = filteredIndex.Skip(offset).Take(pageSize).ToList().Select(e =>
                    {
                        var groupApp = groupAppIndex.Entries.FirstOrDefault(a => a.Key == e.Key);
                        return new AppListItem()
                        {
                            Key = e.Key,
                            Name = (groupApp != null) ? groupApp.Name : TryResolveAppNameDirect(e.Key, apps)
                        };
                    }).ToList().OrderBy(app => app.Name);

                var list = new TargetAppList()
                {
                    Apps = listItems,
                    TargetKey = targetKey,
                    Query = query,
                    Offset = offset,
                    PageSize = pageSize,
                    TotalCount = count,
                };

                return list;
            }
            catch (Exception ex)
            {
                throw new DeploymentException(string.Format("Failed getting app keys for target \"{0}\".", targetKey), ex);
            }
        }
Example #5
0
 private string TryResolveAppNameDirect(Guid appKey, Apps apps = null, string defaultName = "[FailedResolvingName]")
 {
     if (apps == null)
     {
         apps = new Apps(Context);
     }
     try
     {
         var app = apps.GetApp(appKey);
         return app.Name;
     }
     catch (Exception) { }
     return defaultName;
 }