public async Task Constructor_CreatesSecretPathIfNotExists(SecretsRepositoryType repositoryType, string sku) { string path = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()); _fixture.Environment.SetEnvironmentVariable(EnvironmentSettingNames.AzureWebsiteSku, sku); await _fixture.TestInitialize(repositoryType, path); try { bool preConstDirExists = Directory.Exists(path); var target = _fixture.GetNewSecretRepository(); if (_fixture.Environment.IsDynamicSku()) { await Task.Delay(TimeSpan.FromMilliseconds(2 * Utility.ColdStartDelayMS)); } bool postConstDirExists = Directory.Exists(path); Assert.False(preConstDirExists); Assert.True(postConstDirExists); } finally { if (Directory.Exists(path)) { Directory.Delete(path); } } }
public async Task WriteAsync_ChangeNotificationUpdatesExistingSecret(SecretsRepositoryType repositoryType) { using (var directory = new TempDirectory()) { await _fixture.TestInitialize(repositoryType, directory.Path); string testFunctionName = functionName; ScriptSecretsType secretsType = ScriptSecretsType.Function; FunctionSecrets initialSecretText = new FunctionSecrets() { Keys = new List <Key> { new Key(KeyName, "test1") } }; FunctionSecrets updatedSecretText = new FunctionSecrets() { Keys = new List <Key> { new Key(KeyName, "test2") } }; await _fixture.WriteSecret(testFunctionName, initialSecretText); var target = _fixture.GetNewSecretRepository(); ScriptSecrets preTextResult = await target.ReadAsync(secretsType, testFunctionName); await _fixture.WriteSecret(testFunctionName, updatedSecretText); ScriptSecrets postTextResult = await target.ReadAsync(secretsType, testFunctionName); Assert.Equal("test1", (preTextResult as FunctionSecrets).Keys[0].Value); Assert.Equal("test2", (postTextResult as FunctionSecrets).Keys[0].Value); } }
public async Task TestInitialize(SecretsRepositoryType repositoryType, string secretsDirectory, string testSiteName = null) { RepositoryType = repositoryType; SecretsDirectory = secretsDirectory; if (testSiteName != null) { TestSiteName = testSiteName; } if (RepositoryType == SecretsRepositoryType.BlobStorageSas) { BlobSasConnectionUri = await TestHelpers.CreateBlobContainerSas(BlobConnectionString, "azure-webjobs-secrets-sas"); BlobContainer = new CloudBlobContainer(BlobSasConnectionUri); } else { BlobContainer = CloudStorageAccount.Parse(BlobConnectionString).CreateCloudBlobClient().GetContainerReference("azure-webjobs-secrets"); } await ClearAllBlobSecrets(); ClearAllFileSecrets(); await ClearAllKeyVaultSecrets(); LoggerProvider = new TestLoggerProvider(); var loggerFactory = new LoggerFactory(); loggerFactory.AddProvider(LoggerProvider); }
public async Task ReadAsync_ReadsExpectedFile(SecretsRepositoryType repositoryType, ScriptSecretsType secretsType) { using (var directory = new TempDirectory()) { await _fixture.TestInitialize(repositoryType, directory.Path); ScriptSecrets testSecrets = null; if (secretsType == ScriptSecretsType.Host) { testSecrets = new HostSecrets() { MasterKey = new Key("master", "test"), FunctionKeys = new List <Key>() { new Key(KeyName, "test") }, SystemKeys = new List <Key>() { new Key(KeyName, "test") } }; } else { testSecrets = new FunctionSecrets() { Keys = new List <Key>() { new Key(KeyName, "test") } }; } string testFunctionName = secretsType == ScriptSecretsType.Host ? "host" : functionName; await _fixture.WriteSecret(testFunctionName, testSecrets); var target = _fixture.GetNewSecretRepository(); ScriptSecrets secretsContent = await target.ReadAsync(secretsType, testFunctionName); if (secretsType == ScriptSecretsType.Host) { Assert.Equal((secretsContent as HostSecrets).MasterKey.Name, "master"); Assert.Equal((secretsContent as HostSecrets).MasterKey.Value, "test"); Assert.Equal((secretsContent as HostSecrets).FunctionKeys[0].Name, KeyName); Assert.Equal((secretsContent as HostSecrets).FunctionKeys[0].Value, "test"); Assert.Equal((secretsContent as HostSecrets).SystemKeys[0].Name, KeyName); Assert.Equal((secretsContent as HostSecrets).SystemKeys[0].Value, "test"); } else { Assert.Equal((secretsContent as FunctionSecrets).Keys[0].Name, KeyName); Assert.Equal((secretsContent as FunctionSecrets).Keys[0].Value, "test"); } } }
public void TestInitialize(SecretsRepositoryType repositoryType, string secretsDirectory, string testSiteName = null) { RepositoryType = repositoryType; SecretsDirectory = secretsDirectory; if (testSiteName != null) { TestSiteName = testSiteName; } ClearAllBlobSecrets(); ClearAllFileSecrets(); }
public async Task TestInitialize(SecretsRepositoryType repositoryType, string secretsDirectory, string testSiteName = null) { RepositoryType = repositoryType; SecretsDirectory = secretsDirectory; if (testSiteName != null) { TestSiteName = testSiteName; } await ClearAllBlobSecrets(); ClearAllFileSecrets(); await ClearAllKeyVaultSecrets(); }
private async Task ReadAsync_ReadsExpectedFile(SecretsRepositoryType repositoryType, ScriptSecretsType secretsType) { using (var directory = new TempDirectory()) { _fixture.TestInitialize(repositoryType, directory.Path); string testContent = "test"; string testFunctionName = secretsType == ScriptSecretsType.Host ? "host" : "testfunction"; _fixture.WriteSecret(testFunctionName, testContent); var target = _fixture.GetNewSecretRepository(); string secretsContent = await target.ReadAsync(secretsType, testFunctionName); Assert.Equal(testContent, secretsContent); } }
private async Task WriteAsync_CreatesExpectedFile(SecretsRepositoryType repositoryType, ScriptSecretsType secretsType) { using (var directory = new TempDirectory()) { _fixture.TestInitialize(repositoryType, directory.Path); string testContent = "test"; string testFunctionName = secretsType == ScriptSecretsType.Host ? null : "TestFunction"; var target = _fixture.GetNewSecretRepository(); await target.WriteAsync(secretsType, testFunctionName, testContent); string filePath = Path.Combine(directory.Path, $"{testFunctionName ?? "host"}.json"); if (repositoryType == SecretsRepositoryType.BlobStorage) { Assert.True(_fixture.MarkerFileExists(testFunctionName ?? "host")); } Assert.Equal(testContent, _fixture.GetSecretText(testFunctionName ?? "host")); } }
public async Task GetSecretSnapshots_ReturnsExpected(SecretsRepositoryType repositoryType, ScriptSecretsType secretsType) { using (var directory = new TempDirectory()) { await _fixture.TestInitialize(repositoryType, directory.Path); string testContent = "test"; string testFunctionName = secretsType == ScriptSecretsType.Host ? null : "TestFunction"; var target = _fixture.GetNewSecretRepository(); await target.WriteAsync(secretsType, testFunctionName, testContent); for (int i = 0; i < 5; i++) { await target.WriteSnapshotAsync(secretsType, testFunctionName, testContent); } string[] files = await target.GetSecretSnapshots(secretsType, testFunctionName); Assert.True(files.Length > 0); } }
private async Task Constructor_CreatesSecretPathIfNotExists(SecretsRepositoryType repositoryType) { string path = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()); await _fixture.TestInitialize(repositoryType, path); try { bool preConstDirExists = Directory.Exists(path); var target = _fixture.GetNewSecretRepository(); bool postConstDirExists = Directory.Exists(path); Assert.False(preConstDirExists); Assert.True(postConstDirExists); } finally { if (Directory.Exists(path)) { Directory.Delete(path); } } }
private async Task WriteAsync_ChangeNotificationUpdatesExistingSecret(SecretsRepositoryType repositoryType) { using (var directory = new TempDirectory()) { _fixture.TestInitialize(repositoryType, directory.Path); string testFunctionName = "TestFunction"; ScriptSecretsType secretsType = ScriptSecretsType.Function; string initialSecretText = "TextOne"; string updatedSecretText = "TextTwo"; _fixture.WriteSecret(testFunctionName, initialSecretText); var target = _fixture.GetNewSecretRepository(); string preTextResult = await target.ReadAsync(secretsType, testFunctionName); _fixture.WriteSecret(testFunctionName, updatedSecretText); string postTextResult = await target.ReadAsync(secretsType, testFunctionName); Assert.Equal(initialSecretText, preTextResult); Assert.Equal(updatedSecretText, postTextResult); } }
public async Task GetSecretSnapshots_ReturnsExpected(SecretsRepositoryType repositoryType, ScriptSecretsType secretsType) { using (var directory = new TempDirectory()) { await _fixture.TestInitialize(repositoryType, directory.Path); ScriptSecrets secrets = null; if (secretsType == ScriptSecretsType.Host) { secrets = new HostSecrets() { MasterKey = new Key("master", "test") }; } else { secrets = new FunctionSecrets() { Keys = new List <Key>() { new Key(KeyName, "test") } }; } string testFunctionName = secretsType == ScriptSecretsType.Host ? null : functionName; var target = _fixture.GetNewSecretRepository(); await target.WriteAsync(secretsType, testFunctionName, secrets); for (int i = 0; i < 5; i++) { await target.WriteSnapshotAsync(secretsType, testFunctionName, secrets); } string[] files = await target.GetSecretSnapshots(secretsType, testFunctionName); Assert.True(files.Length > 0); } }
public async Task BlobStorageRepo_WriteAsync_ChangeNotificationUpdatesExistingSecret(SecretsRepositoryType repositoryType) { await WriteAsync_ChangeNotificationUpdatesExistingSecret(repositoryType); }
public async Task BlobStorageRepo_Constructor_CreatesSecretPathIfNotExists(SecretsRepositoryType repositoryType) { await Constructor_CreatesSecretPathIfNotExists(repositoryType); }
public async Task BlobStorageRepo_ReadAsync_ReadsExpectedFile(SecretsRepositoryType repositoryType, ScriptSecretsType secretsType) { await ReadAsync_ReadsExpectedFile(repositoryType, secretsType); }
public async Task BlobStorageRepo_WriteAsync_CreatesExpectedFile(SecretsRepositoryType repositoryType, ScriptSecretsType secretsType) { await WriteAsync_CreatesExpectedFile(repositoryType, secretsType); }
public async Task ReadAsync_ReadsExpectedKeyVaultPages(SecretsRepositoryType repositoryType, ScriptSecretsType secretsType) { using (var directory = new TempDirectory()) { await _fixture.TestInitialize(repositoryType, directory.Path); ScriptSecrets testSecrets = null; int keyCount = 35; List <Key> functionKeys = new List <Key>(); for (int i = 0; i < keyCount; ++i) { functionKeys.Add(new Key(KeyName + Guid.NewGuid().ToString(), "test" + i.ToString())); } if (secretsType == ScriptSecretsType.Host) { testSecrets = new HostSecrets() { MasterKey = new Key("master", "test"), FunctionKeys = functionKeys, SystemKeys = new List <Key>() { new Key(KeyName, "test") } }; } else { testSecrets = new FunctionSecrets() { Keys = functionKeys }; } string testFunctionName = secretsType == ScriptSecretsType.Host ? "host" : functionName; await _fixture.WriteSecret(testFunctionName, testSecrets); var target = _fixture.GetNewSecretRepository(); ScriptSecrets secretsContent = await target.ReadAsync(secretsType, testFunctionName); if (secretsType == ScriptSecretsType.Host) { Assert.Equal((secretsContent as HostSecrets).MasterKey.Name, "master"); Assert.Equal((secretsContent as HostSecrets).MasterKey.Value, "test"); Assert.Equal((secretsContent as HostSecrets).FunctionKeys.Count, functionKeys.Count); foreach (Key originalKey in functionKeys) { var matchingKeys = (secretsContent as HostSecrets).FunctionKeys.Where(x => string.Equals(x.Name, originalKey.Name)); Assert.Equal(matchingKeys.Count(), 1); Assert.Equal(matchingKeys.First().Value, originalKey.Value); } Assert.Equal((secretsContent as HostSecrets).SystemKeys[0].Name, KeyName); Assert.Equal((secretsContent as HostSecrets).SystemKeys[0].Value, "test"); } else { Assert.Equal((secretsContent as FunctionSecrets).Keys.Count, functionKeys.Count); foreach (Key originalKey in functionKeys) { var matchingKeys = (secretsContent as FunctionSecrets).Keys.Where(x => string.Equals(x.Name, originalKey.Name)); Assert.Equal(matchingKeys.Count(), 1); Assert.Equal(matchingKeys.First().Value, originalKey.Value); } } } }
public async Task WriteAsync_CreatesExpectedFile(SecretsRepositoryType repositoryType, ScriptSecretsType secretsType) { using (var directory = new TempDirectory()) { await _fixture.TestInitialize(repositoryType, directory.Path); ScriptSecrets secrets = null; if (secretsType == ScriptSecretsType.Host) { secrets = new HostSecrets() { MasterKey = new Key("master", "test"), FunctionKeys = new List <Key>() { new Key(KeyName, "test") }, SystemKeys = new List <Key>() { new Key(KeyName, "test") } }; } else { secrets = new FunctionSecrets() { Keys = new List <Key>() { new Key(KeyName, "test") } }; } string testFunctionName = secretsType == ScriptSecretsType.Host ? null : functionName; var target = _fixture.GetNewSecretRepository(); await target.WriteAsync(secretsType, testFunctionName, secrets); string filePath = Path.Combine(directory.Path, $"{testFunctionName ?? "host"}.json"); if (repositoryType == SecretsRepositoryType.BlobStorage || repositoryType == SecretsRepositoryType.BlobStorageSas) { Assert.True(_fixture.MarkerFileExists(testFunctionName ?? "host")); } ScriptSecrets secrets1 = await _fixture.GetSecretText(testFunctionName ?? "host", secretsType); if (secretsType == ScriptSecretsType.Host) { Assert.Equal((secrets1 as HostSecrets).MasterKey.Name, "master"); Assert.Equal((secrets1 as HostSecrets).MasterKey.Value, "test"); Assert.Equal((secrets1 as HostSecrets).FunctionKeys[0].Name, KeyName); Assert.Equal((secrets1 as HostSecrets).FunctionKeys[0].Value, "test"); Assert.Equal((secrets1 as HostSecrets).SystemKeys[0].Name, KeyName); Assert.Equal((secrets1 as HostSecrets).SystemKeys[0].Value, "test"); } else { Assert.Equal((secrets1 as FunctionSecrets).Keys[0].Name, KeyName); Assert.Equal((secrets1 as FunctionSecrets).Keys[0].Value, "test"); } } }