示例#1
0
        private static void Main(string[] args)
        {
            // All you have to do is put new experiment classes in the ExperimentFactory.
            ExperimentFactory factory = new ExperimentFactory();

            Sandbox sandbox = new Sandbox(factory);

            sandbox.Run();
        }
示例#2
0
        /** Removes experimental part.
         *  TODO: Check if there is another active contract using this part in which case we have to keep it! */
        private void removeExperimentalParts()
        {
            AvailablePart ap = ExperimentFactory.getPartForExperiment(ExperimentFactory.KEMINI_EXPERIMENTS, experiment);

            if (ap != null && ResearchAndDevelopment.IsExperimentalPart(ap))
            {
                NE_Helper.log("Removing experimental part: " + ap.name);
                ResearchAndDevelopment.RemoveExperimentalPart(ap);
            }
        }
示例#3
0
        private void addExperimentalParts()
        {
            AvailablePart ap = ExperimentFactory.getPartForExperiment(ExperimentFactory.KEMINI_EXPERIMENTS, experiment);

            if (ap != null && !ResearchAndDevelopment.PartModelPurchased(ap))
            {
                NE_Helper.log("Adding experimental part: " + ap.name);
                ResearchAndDevelopment.AddExperimentalPart(ap);
            }
        }
        public override bool MeetRequirements()
        {
            CelestialBodySubtree kerbinProgress = null;

            foreach (var node in ProgressTracking.Instance.celestialBodyNodes)
            {
                if (node.Body == Planetarium.fetch.Home)
                {
                    kerbinProgress = node;
                }
            }
            if (kerbinProgress == null)
            {
                return(false);
            }

            return(ExperimentFactory.getAvailableExperiments(ExperimentFactory.KEMINI_EXPERIMENTS).Count > 0);
        }
示例#5
0
        /** Callback used to generate a contract at a particular prestige level.
         *  this.Prestige contains the required prestige level of contract to generate.
         *  Add any other checks and guards in here to prevent too many contracts being generated.
         *  Return TRUE if a contract could be created, FALSE if not. */
        protected override bool Generate()
        {
            if (Prestige != ContractPrestige.Trivial)
            {
                return(false);
            }

            if (ExperimentFactory.getAvailableExperiments(ExperimentFactory.KEMINI_EXPERIMENTS, true).Count == 0)
            {
                return(false);
            }

            NE_Helper.log("Generate Contract");
            if (activeContracts() >= getMaxContracts())
            {
                NE_Helper.log("Generate Contract: Max Contracts reached: " + getMaxContracts());
                return(false);
            }
            targetBody = getTargetBody();
            // Assert: targetBody != null
            NE_Helper.log("Generate Contract: Body: " + targetBody.name);

            if (!setTargetExperiment(getTargetExperiment()))
            {
                return(false);
            }

            NE_Helper.log("Generate Contract: Add Parameter");
            AddParameter(new Parameters.ExperimentDataDoExperimentParameter(targetBody, experiment));
            AddParameter(new Parameters.ExperimentDataReturnExperimentParameter(targetBody, experiment));

            NE_Helper.log("Generate Contract: set Values ");
            base.SetExpiry(10, 100);
            base.SetScience(5f, targetBody);
            base.SetDeadlineYears(1f, targetBody);
            base.SetReputation(80f, 30f, targetBody);
            base.SetFunds(15000f, 30000f, 5000f, targetBody);
            agent = AgentList.Instance.GetAgent("Nehemiah Engineering");
            NE_Helper.log("Generate Contract: done Exp: " + experiment.getAbbreviation() + " Body: " + targetBody.name + " funds Adv: " + this.FundsAdvance);
            return(true);
        }
        private ExperimentData getTargetExperiment()
        {
            List <ExperimentData> unlockedExperiments = ExperimentFactory.getAvailableExperiments(ExperimentFactory.KEMINI_EXPERIMENTS);
            List <ExperimentData> unlookedNoContract  = new List <ExperimentData>();

            foreach (ExperimentData exp in unlockedExperiments)
            {
                if (activeAndDoneContracts(exp, targetBody) == 0)
                {
                    unlookedNoContract.Add(exp);
                }
            }
            if (unlookedNoContract.Count == 0)
            {
                return(null);
            }
            else
            {
                return(unlookedNoContract[UnityEngine.Random.Range(0, unlookedNoContract.Count)]);
            }
        }
示例#7
0
        private ExperimentData getTargetExperiment()
        {
            List <ExperimentData> unlockedExperiments = ExperimentFactory.getAvailableExperiments(ExperimentFactory.KEMINI_EXPERIMENTS, true);
            List <ExperimentData> unlockedNoContract  = new List <ExperimentData>();

            for (int idx = 0, count = unlockedExperiments.Count; idx < count; idx++)
            {
                var exp = unlockedExperiments[idx];
                if (activeAndDoneContracts(exp, targetBody) == 0)
                {
                    unlockedNoContract.Add(exp);
                }
            }
            if (unlockedNoContract.Count == 0)
            {
                return(null);
            }
            else
            {
                return(unlockedNoContract[UnityEngine.Random.Range(0, unlockedNoContract.Count)]);
            }
        }
示例#8
0
        public void ExperimentLifecycleTest()
        {
            using (MockContext context = MockContext.Start(this.GetType()))
            {
                var chaosManagementClient = this.GetChaosManagementClient(context, handler);
                var experiment            = ExperimentFactory.CreateDelayActionExperiment(
                    experimentName: TestConstants.ExperimentName,
                    branchName: TestConstants.BranchName,
                    stepName: TestConstants.StepName,
                    location: TestConstants.Region,
                    principalId: TestConstants.ExperimentIdentityPrincipalId,
                    tenantId: TestConstants.ExperimentIdentityTenantId);

                var createdExperimentResponse = chaosManagementClient.Experiments.CreateOrUpdateWithHttpMessagesAsync(TestConstants.ResourceGroupName, TestConstants.ExperimentName, experiment).GetAwaiter().GetResult();

                Assert.NotNull(createdExperimentResponse);
                Assert.Equal(HttpStatusCode.OK, createdExperimentResponse.Response.StatusCode);

                var getExperimentResponse = chaosManagementClient.Experiments.GetAsync(TestConstants.ResourceGroupName, TestConstants.ExperimentName).GetAwaiter().GetResult();

                Assert.NotNull(getExperimentResponse);

                var listExperimentsResponse = chaosManagementClient.Experiments.ListWithHttpMessagesAsync(TestConstants.ResourceGroupName, false).GetAwaiter().GetResult();
                Assert.NotNull(listExperimentsResponse);

                var listExperiments = ResponseContentToListExperiments(listExperimentsResponse.Response.Content.ReadAsStringAsync().GetAwaiter().GetResult());
                Assert.True(listExperiments.Count > 0);

                var startExperimentResponse = chaosManagementClient.Experiments.StartWithHttpMessagesAsync(TestConstants.ResourceGroupName, TestConstants.ExperimentName).GetAwaiter().GetResult();

                Assert.NotNull(startExperimentResponse);
                Assert.Equal(HttpStatusCode.Accepted, startExperimentResponse.Response.StatusCode);

                var statusElements = new Uri(startExperimentResponse.Body.StatusUrl).AbsolutePath.Split('/');
                Assert.True(statusElements.Length == 11);

                var statusName = statusElements[10];
                var status     = string.Empty;

                do
                {
                    Thread.Sleep(1000 * 120); // Sleep for 2 minute so we let the experiment execution run to completion.
                    var getStatusResponse = chaosManagementClient.Experiments.GetStatusWithHttpMessagesAsync(TestConstants.ResourceGroupName, TestConstants.ExperimentName, statusName).GetAwaiter().GetResult();
                    Assert.NotNull(getStatusResponse);
                    Assert.Equal(HttpStatusCode.OK, getStatusResponse.Response.StatusCode);
                    status = getStatusResponse.Body.Status;
                }while (!IsStatusTerminal(status));

                Assert.Equal("success", status, StringComparer.InvariantCultureIgnoreCase);

                var getExecutionDetailResponse = chaosManagementClient.Experiments.GetExecutionDetailsWithHttpMessagesAsync(TestConstants.ResourceGroupName, TestConstants.ExperimentName, statusName).GetAwaiter().GetResult();
                Assert.NotNull(getExecutionDetailResponse);
                Assert.Equal(HttpStatusCode.OK, getExecutionDetailResponse.Response.StatusCode);

                var listStatusesResponse = chaosManagementClient.Experiments.ListAllStatusesWithHttpMessagesAsync(TestConstants.ResourceGroupName, TestConstants.ExperimentName).GetAwaiter().GetResult();
                Assert.NotNull(listStatusesResponse);

                var listExperimentStatuses = ResponseContentToListExperimentStatus(listStatusesResponse.Response.Content.ReadAsStringAsync().GetAwaiter().GetResult());
                Assert.True(listExperimentStatuses.Count > 0);

                var listExecutionDetailsResponse = chaosManagementClient.Experiments.ListExecutionDetailsWithHttpMessagesAsync(TestConstants.ResourceGroupName, TestConstants.ExperimentName).GetAwaiter().GetResult();
                Assert.NotNull(listExecutionDetailsResponse);

                var listExecutionDetails = ResponseContentToChaosExperimentExecutionDetailsList(listExecutionDetailsResponse.Response.Content.ReadAsStringAsync().GetAwaiter().GetResult());
                Assert.True(listExecutionDetails.Count > 0);

                var deleteResponse = chaosManagementClient.Experiments.DeleteWithHttpMessagesAsync(TestConstants.ResourceGroupName, TestConstants.ExperimentName).GetAwaiter().GetResult();

                Assert.NotNull(deleteResponse);
                Assert.Equal(HttpStatusCode.OK, deleteResponse.Response.StatusCode);
            }
        }
示例#9
0
 public Sandbox(ExperimentFactory factory)
 {
     this.factory = factory;
 }