nsg operations test hooks and some bug fixes (#1904)

Co-authored-by: stas <statis@microsoft.com>
This commit is contained in:
Stas
2022-05-06 13:43:25 -07:00
committed by GitHub
parent 777a7c6e15
commit ee3908f660
5 changed files with 93 additions and 29 deletions

View File

@ -42,7 +42,6 @@ public class TestHooks {
}
[Function("GetKeyvaultAddress")]
public async Task<HttpResponseData> GetKeyVaultAddress([HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "testhooks/secrets/keyvaultaddress")] HttpRequestData req) {
_log.Info("Getting keyvault address");
@ -87,24 +86,5 @@ public class TestHooks {
return resp;
}
[Function("GetWorkspaceId")]
public async Task<HttpResponseData> GetWorkspaceId([HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "testhooks/logAnalytics/workspaceId")] HttpRequestData req) {
var id = _logAnalytics.GetWorkspaceId();
var resp = req.CreateResponse(HttpStatusCode.OK);
await resp.WriteAsJsonAsync(id);
return resp;
}
[Function("GetMonitorSettings")]
public async Task<HttpResponseData> GetMonitorSettings([HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "testhooks/logAnalytics/monitorSettings")] HttpRequestData req) {
var settings = await _logAnalytics.GetMonitorSettings();
var resp = req.CreateResponse(HttpStatusCode.OK);
await resp.WriteAsJsonAsync(settings);
return resp;
}
}
#endif

View File

@ -16,7 +16,7 @@ namespace ApiService.TestHooks {
public LogAnalyticsTestHooks(ILogTracer log, IConfigOperations configOps, ILogAnalytics logAnalytics) {
_log = log.WithTag("TestHooks", nameof(JobOperationsTestHooks));
_log = log.WithTag("TestHooks", nameof(LogAnalyticsTestHooks));
_configOps = configOps;
_logAnalytics = logAnalytics;
}

View File

@ -70,7 +70,7 @@ namespace ApiService.TestHooks {
var s = await req.ReadAsStringAsync();
var report = JsonSerializer.Deserialize<RegressionReport>(s!, EntityConverter.GetJsonSerializerOptions());
var task = (_notificationOps as NotificationOperations)!.GetRegressionReportTask(report);
var task = (_notificationOps as NotificationOperations)!.GetRegressionReportTask(report!);
var json = JsonSerializer.Serialize(task, EntityConverter.GetJsonSerializerOptions());
var resp = req.CreateResponse(HttpStatusCode.OK);

View File

@ -0,0 +1,68 @@
using System.Net;
using System.Threading.Tasks;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.OneFuzz.Service;
#if DEBUG
namespace ApiService.TestHooks {
public class NsgOperationsTestHooks {
private readonly ILogTracer _log;
private readonly IConfigOperations _configOps;
private readonly INsgOperations _nsgOperations;
public NsgOperationsTestHooks(ILogTracer log, IConfigOperations configOps, INsgOperations nsgOperations) {
_log = log.WithTag("TestHooks", nameof(NotificationOperationsTestHooks));
_configOps = configOps; ;
_nsgOperations = nsgOperations;
}
[Function("GetNsgTestHook")]
public async Task<HttpResponseData> GetNsg([HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "testhooks/nsgOperations/nsg")] HttpRequestData req) {
_log.Info("get nsg");
var query = UriExtension.GetQueryComponents(req.Url);
var nsg = await _nsgOperations.GetNsg(query["name"]);
if (nsg is null) {
var resp = req.CreateResponse(HttpStatusCode.NotFound);
return resp;
} else {
var resp = req.CreateResponse(HttpStatusCode.OK);
var data = nsg!.Data;
await resp.WriteAsJsonAsync(new { ResourceId = data.ResourceGuid });
return resp;
}
}
[Function("ListNsgsTestHook")]
public async Task<HttpResponseData> ListNsgs([HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "testhooks/nsgOperations/listNsgs")] HttpRequestData req) {
_log.Info("list nsgs");
var nsgs = await _nsgOperations.ListNsgs().ToListAsync();
var resp = req.CreateResponse(HttpStatusCode.OK);
await resp.WriteAsJsonAsync(nsgs.Select(x => new { Name = x.Data.Name, ResourceId = x.Data.ResourceGuid }));
return resp;
}
[Function("DeleteNsgTestHook")]
public async Task<HttpResponseData> DeleteNsg([HttpTrigger(AuthorizationLevel.Anonymous, "delete", Route = "testhooks/nsgOperations/nsg")] HttpRequestData req) {
_log.Info("delete nsgs");
var query = UriExtension.GetQueryComponents(req.Url);
var name = query["name"];
var deleted = await _nsgOperations.StartDeleteNsg(name);
var resp = req.CreateResponse(HttpStatusCode.OK);
await resp.WriteAsJsonAsync(new { Name = name, Deleted = deleted });
return resp;
}
}
}
#endif

View File

@ -97,11 +97,18 @@ namespace Microsoft.OneFuzz.Service {
}
public async Async.Task<NetworkSecurityGroupResource?> GetNsg(string name) {
var response = await _creds.GetResourceGroupResource().GetNetworkSecurityGroupAsync(name);
if (response == null) {
//_logTracer.Debug($"nsg %s does not exist: {name}");
try {
var response = await _creds.GetResourceGroupResource().GetNetworkSecurityGroupAsync(name);
return response?.Value;
} catch (RequestFailedException ex) {
if (ex.ErrorCode == "ResourceNotFound") {
_logTracer.Verbose($"could not find nsg with name {name}");
return null;
} else {
_logTracer.Exception(ex, $"failed to get nsg {name}");
throw;
}
}
return response?.Value;
}
public IAsyncEnumerable<NetworkSecurityGroupResource> ListNsgs() {
@ -118,9 +125,18 @@ namespace Microsoft.OneFuzz.Service {
/// </summary>
public async Async.Task<bool> StartDeleteNsg(string name) {
_logTracer.Info($"deleting nsg: {name}");
var nsg = await _creds.GetResourceGroupResource().GetNetworkSecurityGroupAsync(name);
await nsg.Value.DeleteAsync(WaitUntil.Completed);
return true;
try {
var nsg = await _creds.GetResourceGroupResource().GetNetworkSecurityGroupAsync(name);
await nsg.Value.DeleteAsync(WaitUntil.Completed);
return true;
} catch (RequestFailedException ex) {
if (ex.ErrorCode == "ResourceNotFound") {
return true;
} else {
_logTracer.Exception(ex, $"failed to delete nsg {name}");
throw;
}
}
}
private static bool IsConcurrentRequestError(string err) {