mirror of
https://github.com/microsoft/onefuzz.git
synced 2025-06-13 02:28:10 +00:00
nsg operations test hooks and some bug fixes (#1904)
Co-authored-by: stas <statis@microsoft.com>
This commit is contained in:
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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
|
@ -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) {
|
||||
|
Reference in New Issue
Block a user