public async Task UploadModelAsync_ValidModelPath_UploadSuccessAsync() { //Arrange var destinationFolder = @"C:\MLOps"; var modelRepository = new LocalFileModelRepository(new FileSystem(), destinationFolder); var runRepositoryMock = new Mock <IRunRepository>(); var modelCatalog = new ModelCatalog(modelRepository, runRepositoryMock.Object); var runId = Guid.NewGuid(); var modelPath = @"C:\data\model.zip"; var modelStoragePath = @"C:\MLOps"; using var writer = new StreamWriter(modelPath); writer.Close(); runRepositoryMock.Setup(x => x.CreateRunArtifact(runId, It.IsAny <string>())) .Returns(Task.CompletedTask); //Act await modelCatalog.UploadAsync(runId, modelPath); //Assert var fileExists = File.Exists(Path.Combine(modelStoragePath, $"{runId}.zip")); fileExists.Should().BeTrue(); }
public void TestInitialize() { var modelRepository = new LocalFileModelRepository(new FileSystem(), new ModelPathGenerator()); var runRepositoryMock = new Mock <IRunRepository>(); runRepositoryMock .Setup(x => x.CreateRunArtifact(It.IsAny <Guid>(), It.IsAny <string>())) .Returns(Task.FromResult(new RunArtifact())); this.modelRepositoryPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".mlops", "model-repository"); this.sut = new ModelCatalog(modelRepository, runRepositoryMock.Object); }
/// <summary> /// Create MA monitor /// </summary> private MessageAnalyzerMonitor(List <string> GroupList = null, bool isMAInstalled = false) { this.isMAInstalled = isMAInstalled; ConfigureEnvironment(); opnlist = new List <string>(); IMonitorSettings monitorSettings = MonitorFactory.CreateDefaultSettings(); string modelpath = null; if (isMAInstalled) { LiveTraceSession.EnsurePowerShellInitiation(); // If MMA installed, use OPNs under local app data, same as MMA UI, otherwise it will re-generate the CompilationCache if using MMA UI simutaneously. monitorSettings.Host = CreateHostForMAInstalled(); string OPNAndConfigurationPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Microsoft", "MessageAnalyzer", "OPNAndConfiguration"); modelpath = Path.Combine(OPNAndConfigurationPath, "Opns"); //OpnAndConfiguration\Opns\ in local app data } else { monitorSettings.Host = CreateHost(); modelpath = PlatformManager.ModelsDirectory; // PlatformManager.ModelsDirectory is: "OpnAndConfiguration\Opns\" string opnForEtw = Path.Combine(Path.GetDirectoryName(modelpath), "OpnForEtw"); // OpnAndConfiguration\OpnForEtw monitorSettings.ModelLoadPath.Add(opnForEtw); } if (GroupList == null) { monitorSettings.ModelLoadPath.Add(modelpath); opnlist.Add(modelpath); } else { modelpath = Path.GetDirectoryName((PlatformManager.ModelsDirectory)); // modelpath is set to the path of folder "OpnAndConfiguration" GroupList.ForEach(e => monitorSettings.ModelLoadPath.Add(modelpath + "\\" + e)); GroupList.ForEach(e => opnlist.Add(modelpath + "\\" + e)); } monitorSettings.ExtensionLoadPath.Add(PlatformManager.ExtensionsDirectory); monitor = MonitorFactory.CreateLocalMonitor(monitorSettings); monitor.Initialize(); ModelCatalog.WaitForInitialization(); monitor.CatchExceptionOnGetMessageData = true; }
public UsersMetadataModule(ISwaggerModelCatalog modelCatalog, ISwaggerTagCatalog tagCatalog) : base(modelCatalog, tagCatalog) { ModelCatalog.AddModels(typeof(PermissionAction)); ModelCatalog.AddModels(typeof(PermissionRoleApiModel)); ModelCatalog.AddModels(typeof(ResolvedPermissionApiModel)); ModelCatalog.AddModels(typeof(UserApiModel)); ModelCatalog.AddModels(typeof(List <RoleApiModel>)); ModelCatalog.AddModels(typeof(PermissionRequestContext)); RouteDescriber.DescribeRouteWithParams( "AddUser", "", "Adds a new user.", new [] { new HttpResponseMetadata <UserApiModel> { Code = (int)HttpStatusCode.Created, Message = "Created" }, new HttpResponseMetadata { Code = (int)HttpStatusCode.Forbidden, Message = "User does not have access" }, new HttpResponseMetadata <Error> { Code = (int)HttpStatusCode.BadRequest, Message = "User object in body failed validation" }, new HttpResponseMetadata <Error> { Code = (int)HttpStatusCode.Conflict, Message = "User with specified IdentityProvider and Subject already exists" }, new HttpResponseMetadata <Error> { Code = (int)HttpStatusCode.UnsupportedMediaType, Message = "Content-Type header was not included in request" } }, new[] { new BodyParameter <UserApiModel>(modelCatalog) { Name = "User", Description = "The user to add" } }, new [] { _usersTag }).SecurityRequirement(OAuth2WriteScopeBuilder); RouteDescriber.DescribeRouteWithParams( "AddRolesToUser", "", "Adds roles to an existing user.", new[] { new HttpResponseMetadata <UserApiModel> { Code = (int)HttpStatusCode.OK, Message = "Roles added." }, new HttpResponseMetadata { Code = (int)HttpStatusCode.Forbidden, Message = "User does not have access to add the specified roles." }, new HttpResponseMetadata <Error> { Code = (int)HttpStatusCode.BadRequest, Message = "List of roles in body failed validation" }, new HttpResponseMetadata <Error> { Code = (int)HttpStatusCode.NotFound, Message = "Specified user does not exist" }, new HttpResponseMetadata <Error> { Code = (int)HttpStatusCode.UnsupportedMediaType, Message = "Content-Type header was not included in request" } }, new[] { new BodyParameter <List <RoleApiModel> >(modelCatalog) { Name = "Roles", Description = "The roles to add" } }, new[] { _usersTag }).SecurityRequirement(OAuth2WriteScopeBuilder); RouteDescriber.DescribeRouteWithParams( "DeleteRolesFromUser", "", "Deletes roles from existing user.", new[] { new HttpResponseMetadata <UserApiModel> { Code = (int)HttpStatusCode.OK, Message = "Roles deleted." }, new HttpResponseMetadata { Code = (int)HttpStatusCode.Forbidden, Message = "User does not have access to add the specified roles." }, new HttpResponseMetadata <Error> { Code = (int)HttpStatusCode.BadRequest, Message = "List of roles in body failed validation" }, new HttpResponseMetadata <Error> { Code = (int)HttpStatusCode.NotFound, Message = "Specified user does not exist" }, new HttpResponseMetadata <Error> { Code = (int)HttpStatusCode.UnsupportedMediaType, Message = "Content-Type header was not included in request" } }, new[] { new BodyParameter <List <RoleApiModel> >(modelCatalog) { Name = "Roles", Description = "The roles to delete." } }, new[] { _usersTag }).SecurityRequirement(OAuth2WriteScopeBuilder); RouteDescriber.DescribeRoute( "GetCurrentUserPermissions", "", "Gets permissions for currently authenticated user", new[] { new HttpResponseMetadata <UserPermissionsApiModel> { Code = (int)HttpStatusCode.OK, Message = "OK" }, new HttpResponseMetadata { Code = (int)HttpStatusCode.Forbidden, Message = "Client does not have access" } }, new[] { _usersTag }).SecurityRequirement(OAuth2ReadScopeBuilder); RouteDescriber.DescribeRouteWithParams( "GetUserPermissions", "", "Gets permissions for specified user. Note this will only retrieve 1) granular permissions and 2) permissions under roles mapped to Custom groups.", new[] { new HttpResponseMetadata <List <ResolvedPermissionApiModel> > { Code = (int)HttpStatusCode.OK, Message = "OK" }, new HttpResponseMetadata { Code = (int)HttpStatusCode.Forbidden, Message = "Client does not have access" } }, new[] { _identityProviderParameter, _subjectIdParameter }, new[] { _usersTag }).SecurityRequirement(OAuth2ReadScopeBuilder); RouteDescriber.DescribeRouteWithParams( "AddGranularPermissions", "", "Adds granular permissions for a user, either to allow or deny", new[] { new HttpResponseMetadata { Code = (int)HttpStatusCode.NoContent, Message = "Granular permissions were added" }, new HttpResponseMetadata { Code = (int)HttpStatusCode.Forbidden, Message = "Client does not have access" }, new HttpResponseMetadata { Code = (int)HttpStatusCode.BadRequest, Message = "No permissions to add included in request." }, new HttpResponseMetadata { Code = (int)HttpStatusCode.Conflict, Message = "The permissions specified already exist either as duplicates or with a different permission action than the one specified or a permission is in the request as both allow and deny" }, new HttpResponseMetadata <Error> { Code = (int)HttpStatusCode.UnsupportedMediaType, Message = "Content-Type header was not included in request" } }, new[] { _identityProviderParameter, _subjectIdParameter, new BodyParameter <List <PermissionApiModel> >(modelCatalog) { Name = "GranularPermissions", Description = "The permissions to add for the user." } }, new[] { _usersTag }).SecurityRequirement(OAuth2ManageClientsScopeBuilder); RouteDescriber.DescribeRouteWithParams( "DeleteGranularPermissions", "", "Deletes granular permissions for a user", new[] { new HttpResponseMetadata { Code = (int)HttpStatusCode.NoContent, Message = "The permissions were deleted" }, new HttpResponseMetadata { Code = (int)HttpStatusCode.Forbidden, Message = "Client does not have access" }, new HttpResponseMetadata { Code = (int)HttpStatusCode.BadRequest, Message = "No permissions were specified or the permissions specified do not exist or already exist with a different permission action." } }, new[] { _identityProviderParameter, _subjectIdParameter, new BodyParameter <List <PermissionApiModel> >(modelCatalog) { Name = "GranularPermissions", Description = "The permissions to delete from the user." } }, new[] { _usersTag }).SecurityRequirement(OAuth2ManageClientsScopeBuilder); RouteDescriber.DescribeRouteWithParams( "GetUserGroups", "", "Gets custom groups for a user", new[] { new HttpResponseMetadata <IEnumerable <GroupUserApiModel> > { Code = (int)HttpStatusCode.OK, Message = "List of GroupUserApiModel entities representing groups in which the user belongs" }, new HttpResponseMetadata { Code = (int)HttpStatusCode.Forbidden, Message = "Client does not have access" }, new HttpResponseMetadata <Error> { Code = (int)HttpStatusCode.NotFound, Message = "User was not found" } }, new[] { _subjectIdParameter }, new[] { _usersTag }).SecurityRequirement(OAuth2ReadScopeBuilder); RouteDescriber.DescribeRouteWithParams( "GetUserRoles", "", "Gets the roles associated with a user", new[] { new HttpResponseMetadata <List <RoleApiModel> > { Code = (int)HttpStatusCode.OK, Message = "List of roles representing the roles this user has been directly associated to." }, new HttpResponseMetadata { Code = (int)HttpStatusCode.Forbidden, Message = "Client does not have access" }, new HttpResponseMetadata <Error> { Code = (int)HttpStatusCode.NotFound, Message = "User was not found" } }, new[] { _identityProviderParameter, _subjectIdParameter }, new[] { _usersTag }).SecurityRequirement(OAuth2ReadScopeBuilder); }
public UsersMetadataModule(ISwaggerModelCatalog modelCatalog, ISwaggerTagCatalog tagCatalog) : base(modelCatalog, tagCatalog) { ModelCatalog.AddModels(typeof(PermissionAction)); RouteDescriber.DescribeRoute( "GetUserPermissions", "", "Gets permissions for a user", new[] { new HttpResponseMetadata <UserPermissionsApiModel> { Code = (int)HttpStatusCode.OK, Message = "OK" }, new HttpResponseMetadata { Code = (int)HttpStatusCode.Forbidden, Message = "Client does not have access" } }, new[] { _usersTag }).SecurityRequirement(OAuth2ReadScopeBuilder); RouteDescriber.DescribeRouteWithParams( "AddGranularPermissions", "", "Adds granular permissions for a user, either to allow or deny", new[] { new HttpResponseMetadata { Code = (int)HttpStatusCode.NoContent }, new HttpResponseMetadata { Code = (int)HttpStatusCode.Forbidden, Message = "Client does not have access" } }, new[] { _identityProviderParameter, _subjectIdParameter, new BodyParameter <List <PermissionApiModel> >(modelCatalog) { Name = "GranularPermissions", Description = "The permissions to add for the user." } }, new[] { _usersTag }).SecurityRequirement(OAuth2ManageClientsScopeBuilder); RouteDescriber.DescribeRouteWithParams( "DeleteGranularPermissions", "", "Deletes granular permissions for a user", new[] { new HttpResponseMetadata { Code = (int)HttpStatusCode.NoContent }, new HttpResponseMetadata { Code = (int)HttpStatusCode.Forbidden, Message = "Client does not have access" } }, new[] { _identityProviderParameter, _subjectIdParameter, new BodyParameter <List <PermissionApiModel> >(modelCatalog) { Name = "GranularPermissions", Description = "The permissions to delete from the user." } }, new[] { _usersTag }).SecurityRequirement(OAuth2ManageClientsScopeBuilder); RouteDescriber.DescribeRouteWithParams( "GetUserGroups", "", "Gets custom groups for a user", new[] { new HttpResponseMetadata <IEnumerable <string> > { Code = (int)HttpStatusCode.OK, Message = "List of strings representing group names in which the user belongs" }, new HttpResponseMetadata { Code = (int)HttpStatusCode.Forbidden, Message = "Client does not have access" }, new HttpResponseMetadata <Error> { Code = (int)HttpStatusCode.NotFound, Message = "User was not found" } }, new[] { _subjectIdParameter }, new[] { _usersTag }).SecurityRequirement(OAuth2ReadScopeBuilder); }