public void Test_Remote_License_Success() { if (Environment.GetEnvironmentVariable("APPVEYOR") == "True") { return; } var clock = new OffsetClock("2017-04-25", "2017-04-25"); var mgr = new LicenseManagerSingleton(ImazenPublicKeys.Test, clock) { Cache = new StringCacheMem() }; Uri invokedUri = null; var httpHandler = MockHttpHelpers.MockRemoteLicense(mgr, HttpStatusCode.OK, LicenseStrings.EliteSubscriptionRemote, (r, c) => { invokedUri = r.RequestUri; }); var conf = new Config(); try { conf.Plugins.LicenseScope = LicenseAccess.Local; conf.Plugins.Install(new LicensedPlugin(mgr, clock, "R_Elite")); conf.Plugins.AddLicense(LicenseStrings.EliteSubscriptionPlaceholder); Assert.Equal(1, mgr.GetAllLicenses().Count()); Assert.True(mgr.GetAllLicenses().First().IsRemote); mgr.Heartbeat(); mgr.WaitForTasks(); Assert.Empty(mgr.GetIssues()); Mock.Verify(httpHandler); Assert.StartsWith( "https://s3-us-west-2.amazonaws.com/licenses.imazen.net/v1/licenses/latest/", invokedUri.ToString()); Assert.NotNull(mgr.GetAllLicenses().First().FetchedLicense()); var result = new Computation(conf, ImazenPublicKeys.Test, mgr, mgr, clock, true); Assert.True(result.LicensedForRequestUrl(new Uri("http://anydomain"))); Assert.Equal(0, mgr.WaitForTasks()); Assert.Empty(mgr.GetIssues()); Assert.NotNull(conf.GetDiagnosticsPage()); Assert.NotNull(conf.GetLicensesPage()); } catch { output.WriteLine(conf.GetDiagnosticsPage()); throw; } }
public void Test_DomainPerCore() { // set clock to present var clock = new FakeClock("2017-04-25", "2017-04-25"); foreach (var set in LicenseStrings.GetSets("PerCore2Domains")) { var mgr = new LicenseManagerSingleton(ImazenPublicKeys.Test, clock, new StringCacheMem()); MockHttpHelpers.MockRemoteLicense(mgr, HttpStatusCode.OK, set.Remote, null); var request = new RequestUrlProvider(); var conf = new Config(); conf.Plugins.LicenseScope = LicenseAccess.Local; conf.Plugins.AddLicense(set.Placeholder); conf.Plugins.LicenseError = LicenseErrorAction.Exception; conf.Plugins.Install(new Gradient()); conf.Plugins.Install(new EmptyLicenseEnforcedPlugin(new LicenseEnforcer <EmptyLicenseEnforcedPlugin>(mgr, mgr, request.Get).EnableEnforcement(), "R_Performance")); Assert.Equal(1, mgr.WaitForTasks()); // We don't raise exceptions without a request url, unless there are absolutely no valid licenses request.Url = null; Assert.False(IsWatermarking(conf, mgr)); // We never watermark outside of http requests conf.Plugins.LicenseError = LicenseErrorAction.Watermark; Assert.False(IsWatermarking(conf, mgr)); conf.Plugins.LicenseError = LicenseErrorAction.Exception; //We should not raise an exception on our domains request.Url = new Uri("http://acme.com"); Assert.False(IsWatermarking(conf, mgr)); request.Url = new Uri("http://acmestaging.com"); Assert.False(IsWatermarking(conf, mgr)); // We should raise an exception on other domains request.Url = new Uri("http://other.co"); Assert.Throws <LicenseException>(() => IsWatermarking(conf, mgr)); Assert.Empty(mgr.GetIssues()); } }
public void Test_Revocations() { // set clock to present, and build date to far future var clock = new FakeClock("2017-04-25", "2022-01-01"); foreach (var set in LicenseStrings.GetSets("Cancelled", "SoftRevocation", "HardRevocation")) { output.WriteLine($"Testing revocation for {set.Name}"); var mgr = new LicenseManagerSingleton(ImazenPublicKeys.Test, clock, new StringCacheMem()); MockHttpHelpers.MockRemoteLicense(mgr, HttpStatusCode.OK, set.Remote, null); var request = new RequestUrlProvider(); var conf = new Config(); conf.Plugins.LicenseScope = LicenseAccess.Local; conf.Plugins.AddLicense(set.Placeholder); conf.Plugins.LicenseError = LicenseErrorAction.Watermark; conf.Plugins.Install(new Gradient()); conf.Plugins.Install(new EmptyLicenseEnforcedPlugin(new LicenseEnforcer <EmptyLicenseEnforcedPlugin>(mgr, mgr, request.Get).EnableEnforcement(), "R4Creative")); Assert.Equal(1, mgr.WaitForTasks()); request.Url = null; Assert.False(IsWatermarking(conf, mgr)); // We don't raise exceptions outside of http requests, unless there are absolutely no valid licenses conf.Plugins.LicenseError = LicenseErrorAction.Exception; // There are no valid licences request.Url = null; Assert.Throws <LicenseException>(() => IsWatermarking(conf, mgr)); // But we certainly should be, here request.Url = new Uri("http://other.co"); Assert.Throws <LicenseException>(() => IsWatermarking(conf, mgr)); Assert.NotEmpty(mgr.GetIssues()); } }
public void Test_Caching_With_Write_Delay() { if (Environment.GetEnvironmentVariable("APPVEYOR") == "True") { return; } var clock = new OffsetClock("2017-04-25", "2017-04-25"); var cache = new StringCacheMem(); // Populate cache { var mgr = new LicenseManagerSingleton(ImazenPublicKeys.Test, clock) { Cache = cache }; MockHttpHelpers.MockRemoteLicense(mgr, HttpStatusCode.OK, LicenseStrings.EliteSubscriptionRemote, null); var conf = new Config(); conf.Plugins.LicenseScope = LicenseAccess.Local; conf.Plugins.Install(new LicensedPlugin(mgr, clock, "R_Elite", "R4Elite")); conf.Plugins.AddLicense(LicenseStrings.EliteSubscriptionPlaceholder); Assert.Equal(1, mgr.WaitForTasks()); var result = new Computation(conf, ImazenPublicKeys.Test, mgr, mgr, clock, true); Assert.True(result.LicensedForRequestUrl(new Uri("http://anydomain"))); Assert.Empty(mgr.GetIssues()); Assert.NotNull(conf.GetLicensesPage()); } // Use cache { var mgr = new LicenseManagerSingleton(ImazenPublicKeys.Test, clock) { Cache = cache }; var conf = new Config(); conf.Plugins.LicenseScope = LicenseAccess.Local; conf.Plugins.Install(new LicensedPlugin(mgr, clock, "R_Elite", "R4Elite")); conf.Plugins.AddLicense(LicenseStrings.EliteSubscriptionPlaceholder); mgr.Heartbeat(); Assert.Equal(0, mgr.WaitForTasks()); var result = new Computation(conf, ImazenPublicKeys.Test, mgr, mgr, clock, true); Assert.True(result.LicensedForRequestUrl(new Uri("http://anydomain"))); Assert.NotNull(conf.GetDiagnosticsPage()); Assert.NotNull(conf.GetLicensesPage()); Assert.Equal(0, mgr.GetIssues().Count()); MockHttpHelpers.MockRemoteLicenseException(mgr, WebExceptionStatus.NameResolutionFailure); while (!mgr.AllowFetching()) { mgr.Heartbeat(); } mgr.WaitForTasks(); result = new Computation(conf, ImazenPublicKeys.Test, mgr, mgr, clock, true); Assert.True(result.LicensedForRequestUrl(new Uri("http://anydomain"))); Assert.Equal(1, mgr.GetIssues().Count()); } }