def test_custom_counts(self, fixture_working_dir_env_repo_scoped,
                           snapshot):
        """Test getting the a LabBook's package manager dependencies"""
        # Create labbook
        lb = LabBook(fixture_working_dir_env_repo_scoped[0])
        lb.new(owner={"username": "******"},
               name="labbook55",
               description="my first labbook10000")

        cm = ComponentManager(lb)
        # Add packages
        cm.add_component("custom", ENV_UNIT_TEST_REPO, "pillow", 0)
        cm.add_component("custom", ENV_UNIT_TEST_REPO, "noop-2", 0)
        cm.add_component("custom", ENV_UNIT_TEST_REPO, "noop-1", 0)

        query = """
                    {
                      labbook(owner: "default", name: "labbook55") {
                        overview {
                          numAptPackages
                          numConda2Packages
                          numConda3Packages
                          numPipPackages
                          numCustomDependencies
                        }
                      }
                    }
                    """
        snapshot.assert_match(
            fixture_working_dir_env_repo_scoped[2].execute(query))
Esempio n. 2
0
    def test_create_user_note_no_body(self, fixture_working_dir, snapshot):
        """Test creating and getting a user note"""
        # Create labbook
        lb = LabBook(fixture_working_dir[0])
        lb.new(owner={"username": "******"}, name="user-note-test", description="testing user notes")

        # Create a user note
        query = """
        mutation makeUserNote {
          createUserNote(input: {
            owner: "default",
            labbookName: "user-note-test",
            title: "I think this is a thing"
          })
          {
            newActivityRecordEdge {
              node{
                message
                detailObjects{                
                  data
                  type
                  show
                  importance
                  tags
                }
                type
                show
                importance
                tags
              }
            }
          }
        }
        """
        snapshot.assert_match(fixture_working_dir[2].execute(query))
Esempio n. 3
0
    def test_rename_labbook(self, fixture_working_dir):
        """Test renaming a labbook"""
        # Create a dummy labbook to make sure directory structure is set up
        lb_dummy = LabBook(fixture_working_dir[0])
        lb_dummy.new(owner={"username": "******"}, name="dummy-lb", description="Tester dummy lb")

        # Unzip test labbook into working directory
        test_zip_file = os.path.join(resource_filename('lmsrvlabbook', 'tests'), 'data', 'test-labbook.zip')
        labbooks_dir = os.path.join(fixture_working_dir[1], 'default', 'default', 'labbooks')
        with ZipFile(test_zip_file) as zf:
            zf.extractall(labbooks_dir)

        original_dir = os.path.join(labbooks_dir, 'test-labbook')
        new_dir = os.path.join(labbooks_dir, 'test-new-name')

        # rename (without the container being previously built)
        query = f"""
                    mutation myMutation{{
                      renameLabbook(input:{{owner:"default",
                      originalLabbookName: "test-labbook",
                      newLabbookName: "test-new-name"}}) {{
                        success
                      }}
                    }}
                    """
        r = fixture_working_dir[2].execute(query)
        assert r['data']['renameLabbook'] is None
        assert 'errors' in r
        assert 'NotImplemented' in r['errors'][0]['message']
def mock_create_labbooks(fixture_working_dir):
    # Create a labbook in the temporary directory
    config_file = fixture_working_dir[0]
    lb = LabBook(fixture_working_dir[0])
    lb.new(owner={"username": UT_USERNAME},
           name=UT_LBNAME,
           description="Cats labbook 1")

    # Create a file in the dir
    with open(os.path.join(fixture_working_dir[1], 'unittest-examplefile'),
              'w') as sf:
        sf.write("test data")
        sf.seek(0)
    FileOperations.insert_file(lb, 'code', sf.name)

    assert os.path.isfile(
        os.path.join(lb.root_dir, 'code', 'unittest-examplefile'))

    # Create test client
    schema = graphene.Schema(query=LabbookQuery, mutation=LabbookMutations)
    with patch.object(Configuration, 'find_default_config',
                      lambda self: config_file):
        app = Flask("lmsrvlabbook")
        app.config["LABMGR_CONFIG"] = Configuration()
        app.config["LABMGR_ID_MGR"] = get_identity_manager(Configuration())
        with app.app_context():
            flask.g.user_obj = app.config["LABMGR_ID_MGR"].get_user_profile()
            client = Client(
                schema,
                middleware=[LabBookLoaderMiddleware(), error_middleware],
                context_value=ContextMock())
            yield lb, client, schema
    shutil.rmtree(fixture_working_dir, ignore_errors=True)
Esempio n. 5
0
    def test_file_node(self, fixture_working_dir, snapshot):
        """Test listing labbook favorites"""

        lb = LabBook(fixture_working_dir[0])
        lb.new(owner={"username": "******"}, name="labbook1", description="my first labbook1")

        # Setup some favorites in code
        with open(os.path.join(lb.root_dir, 'code', 'test1.txt'), 'wt') as test_file:
            test_file.write("blah1")

        # Create favorites
        lb.create_favorite("code", "test1.txt", description="My file with stuff 1")

        query = """
                    {
                        node(id: "TGFiYm9va0ZpbGU6ZGVmYXVsdCZsYWJib29rMSZjb2RlJnRlc3QxLnR4dA==") {
                            ... on LabbookFile {
                                id
                                key
                                isDir
                                size
                            }
                        }
                    }
                    """
        snapshot.assert_match(fixture_working_dir[2].execute(query))
    def test_package_query(self, snapshot,
                           fixture_working_dir_env_repo_scoped):
        """Test querying for package info"""
        # Create labbook
        lb = LabBook(fixture_working_dir_env_repo_scoped[0])
        lb.new(owner={"username": "******"},
               name="labbook6",
               description="my first labbook10000")

        query = """
                    {
                      labbook(owner: "default", name: "labbook6"){
                        id
                        packages(packageInput: [
                          {manager: "pip", package: "numpy", version:"1.14.2"},
                          {manager: "pip", package: "scipy", version:""}]){
                          id
                          manager 
                          package
                          version
                          isValid     
                        }
                      }
                    }
                """

        snapshot.assert_match(
            fixture_working_dir_env_repo_scoped[2].execute(query))
Esempio n. 7
0
    def test_create_user_note_check_vals(self, fixture_working_dir, snapshot):
        """Test to make sure keys and IDs are getting set OK"""
        # Create labbook
        lb = LabBook(fixture_working_dir[0])
        lb.new(owner={"username": "******"}, name="user-note-test", description="testing user notes")

        # Create a user note
        query = """
        mutation makeUserNote {
          createUserNote(input: {
            owner: "default",
            labbookName: "user-note-test",
            title: "I think this is a thing",
            body: "##AND THIS IS A BODY\\n- asdggf\\n-asdf",
            tags: ["this", "and", "that"]
          })
          {
            newActivityRecordEdge {
                node{
                  message
                  detailObjects{    
                    id
                    key            
                    data
                    type
                    show
                    importance
                    tags
                  }
                  id
                  commit
                  linkedCommit
                  type
                  show
                  importance
                  tags
              }
              cursor
            }
          }
        }
        """
        result = fixture_working_dir[2].execute(query)

        assert len(result['data']['createUserNote']['newActivityRecordEdge']['node']['id']) > 10
        assert type(result['data']['createUserNote']['newActivityRecordEdge']['node']['id']) == str
        assert len(result['data']['createUserNote']['newActivityRecordEdge']['node']['commit']) == 40
        assert type(result['data']['createUserNote']['newActivityRecordEdge']['node']['commit']) == str
        assert result['data']['createUserNote']['newActivityRecordEdge']['node']['linkedCommit'] == "no-linked-commit"
        assert result['data']['createUserNote']['newActivityRecordEdge']['node']['message'] == "I think this is a thing"

        assert len(result['data']['createUserNote']['newActivityRecordEdge']['node']['detailObjects'][0]['id']) > 10
        assert type(result['data']['createUserNote']['newActivityRecordEdge']['node']['detailObjects'][0]['id']) == str
        assert len(result['data']['createUserNote']['newActivityRecordEdge']['node']['detailObjects'][0]['key']) > 10
        assert type(result['data']['createUserNote']['newActivityRecordEdge']['node']['detailObjects'][0]['key']) == str
        assert "AND THIS IS A BODY" in result['data']['createUserNote']['newActivityRecordEdge']['node']['detailObjects'][0]['data'][0][1]
Esempio n. 8
0
    def test_detail_record_node(self, fixture_working_dir, snapshot, fixture_test_file):
        """Test getting an detail record by node ID"""
        lb = LabBook(fixture_working_dir[0])
        lb.new(owner={"username": "******"}, name="labbook1", description="my test description")
        FileOperations.insert_file(lb, "code", fixture_test_file)

        # Get activity record to
        query = """
        {
          labbook(name: "labbook1", owner: "default") {               
            activityRecords {
                edges{
                    node{
                        id
                        commit
                        linkedCommit
                        message
                        type
                        show
                        importance
                        tags
                        detailObjects{
                            id
                            key
                            type
                            data
                            show
                            importance
                            tags
                        }
                        }                        
                    }    
            }
          }
        }
        """
        result1 = fixture_working_dir[2].execute(query)

        query = """
            {{
                node(id: "{}") {{
                    ... on ActivityDetailObject {{
                            id
                            key
                            type
                            data
                            show
                            importance
                            tags   
                    }}
                }}
            }}
            """.format(result1['data']['labbook']['activityRecords']['edges'][0]['node']['detailObjects'][0]['id'])
        result2 = fixture_working_dir[2].execute(query)
        assert result2['data']['node'] == result1['data']['labbook']['activityRecords']['edges'][0]['node']['detailObjects'][0]
    def test_get_custom(self, fixture_working_dir_env_repo_scoped, snapshot):
        """Test getting the a LabBook's custom dependencies"""
        # Create labbook
        lb = LabBook(fixture_working_dir_env_repo_scoped[0])
        lb.new(owner={"username": "******"},
               name="labbook3",
               description="my first labbook10000")

        query = """
                    {
                      labbook(owner: "default", name: "labbook3") {
                        environment {
                         customDependencies { 
                            edges {
                              node {
                                id
                                schema
                                componentId
                                repository
                                revision
                                name
                                description                        
                                tags
                                license
                                url
                                requiredPackageManagers
                                dockerSnippet
                              }
                              cursor
                            }
                            pageInfo {
                              hasNextPage
                              hasPreviousPage
                            }
                         }
                       }  
                      }
                    }            
                    """
        # should be null
        snapshot.assert_match(
            fixture_working_dir_env_repo_scoped[2].execute(query))

        # Add a base image
        cm = ComponentManager(lb)
        cm.add_component("custom", ENV_UNIT_TEST_REPO, "pillow", 0)

        # Test again
        r2 = fixture_working_dir_env_repo_scoped[2].execute(query)
        assert 'errors' not in r2
        snapshot.assert_match(r2)
Esempio n. 10
0
def mock_create_labbooks(fixture_working_dir):
    # Create a labbook in the temporary directory
    lb = LabBook(fixture_working_dir[0])
    lb.new(owner={"username": "******"}, name="labbook1", description="Cats labbook 1")

    # Create a file in the dir
    with open(os.path.join(fixture_working_dir[1], 'sillyfile'), 'w') as sf:
        sf.write("1234567")
        sf.seek(0)
    FileOperations.insert_file(lb, 'code', sf.name)

    assert os.path.isfile(os.path.join(lb.root_dir, 'code', 'sillyfile'))
    # name of the config file, temporary working directory, the schema
    yield fixture_working_dir
    def test_add_package(self, fixture_working_dir_env_repo_scoped, snapshot):
        """Test listing labbooks"""
        lb = LabBook(fixture_working_dir_env_repo_scoped[0])

        labbook_dir = lb.new(name="catbook-package-tester",
                             description="LB to test package mutation",
                             owner={"username": "******"})

        # Add a base image
        pkg_query = """
        mutation myPkgMutation {
          addPackageComponents (input: {
            owner: "default",
            labbookName: "catbook-package-tester",
            packages: [{manager: "conda3", package: "requests", version: "2.18.4"}]           
            
          }) {
            clientMutationId
            newPackageComponentEdges {
                node{
                  id
                  schema
                  manager
                  package
                  version
                  fromBase
                }
                cursor 
            }
          }
        }
        """
        snapshot.assert_match(
            fixture_working_dir_env_repo_scoped[2].execute(pkg_query))
    def test_remove_custom_dep(self, fixture_working_dir_env_repo_scoped,
                               snapshot):
        """Test removing a custom dependency"""
        lb = LabBook(fixture_working_dir_env_repo_scoped[0])

        labbook_dir = lb.new(name="labbook-remove-custom",
                             description="my first labbook",
                             owner={"username": "******"})

        # Add a custom dep
        query = """
        mutation myEnvMutation{
          addCustomComponent(input: {
            owner: "default",
            labbookName: "labbook-remove-custom",
            repository: "gig-dev_components2",
            componentId: "pillow",
            revision: 0
          }) {
            clientMutationId
            newCustomComponentEdge {
              node{
                repository
                componentId
                revision
                name
                description
              }
            }
          }
        }
        """
        snapshot.assert_match(
            fixture_working_dir_env_repo_scoped[2].execute(query))

        # Verify file
        component_file = os.path.join(labbook_dir, '.gigantum', 'env',
                                      'custom',
                                      "gig-dev_components2_pillow.yaml")
        assert os.path.exists(component_file) is True

        # Remove a custom dep
        query = """
        mutation myEnvMutation{
          removeCustomComponent(input: {
            owner: "default",
            labbookName: "labbook-remove-custom",
            repository: "gig-dev_components2",
            componentId: "pillow"
          }) {
            clientMutationId
            success
          }
        }
        """
        snapshot.assert_match(
            fixture_working_dir_env_repo_scoped[2].execute(query))
        assert os.path.exists(component_file) is False
Esempio n. 13
0
    def test_load_one(self, fixture_working_dir):
        """Test loading 1 labbook"""
        lb = LabBook(fixture_working_dir[0])
        lb.new(owner={"username": "******"},
               name="labbook1",
               description="my first labbook1")
        lb.new(owner={"username": "******"},
               name="labbook2",
               description="my first labbook2")
        loader = LabBookLoader()

        key = f"default&default&labbook1"
        promise1 = loader.load(key)
        assert isinstance(promise1, Promise)

        lb = promise1.get()
        assert lb.name == "labbook1"
        assert lb.description == "my first labbook1"
Esempio n. 14
0
    def test_favorites_node(self, fixture_working_dir, snapshot):
        """Test listing labbook favorites"""

        lb = LabBook(fixture_working_dir[0])
        lb.new(owner={"username": "******"}, name="labbook1", description="my first labbook1")

        # Setup some favorites in code
        with open(os.path.join(lb.root_dir, 'code', 'test1.txt'), 'wt') as test_file:
            test_file.write("blah1")

        # Create favorites
        lb.create_favorite("code", "test1.txt", description="My file with stuff 1")

        # Test bad node that isn't a file
        query = """
                    {
                        node(id: "TGFiYm9va0Zhdm9yaXRlOmRlZmF1bHQmbGFiYm9vazEmY29kZSZ0ZXN0MzMzLnR4dA==") {
                            ... on LabbookFavorite {
                                id
                                key
                                description
                                isDir
                                index
                            }
                        }
                    }
                    """
        snapshot.assert_match(fixture_working_dir[2].execute(query))

        # Get the actual item
        query = """
                    {
                        node(id: "TGFiYm9va0Zhdm9yaXRlOmRlZmF1bHQmbGFiYm9vazEmY29kZSZ0ZXN0MS50eHQ=") {
                            ... on LabbookFavorite {
                                id
                                key
                                description
                                isDir
                                index
                            }
                        }
                    }
                    """
        snapshot.assert_match(fixture_working_dir[2].execute(query))
    def test_get_environment_status(self, fixture_working_dir, snapshot):
        """Test getting the a LabBook's environment status"""
        # Create labbooks
        lb = LabBook(fixture_working_dir[0])
        lb.new(owner={"username": "******"},
               name="labbook10",
               description="my first labbook10000")

        query = """
        {
          labbook(owner: "default", name: "labbook10") {
              environment {
                containerStatus
                imageStatus
              }
          }
        }
        """
        snapshot.assert_match(fixture_working_dir[2].execute(query))
    def test_no_remote_url(self, fixture_working_dir_env_repo_scoped,
                           snapshot):
        """Test getting the a LabBook's remote url without publish"""
        # Create labbook
        lb = LabBook(fixture_working_dir_env_repo_scoped[0])
        lb.new(owner={"username": "******"},
               name="labbook6",
               description="my first labbook10000")

        query = """
                    {
                      labbook(owner: "default", name: "labbook6") {
                        overview {
                          remoteUrl
                        }
                      }
                    }
                    """
        snapshot.assert_match(
            fixture_working_dir_env_repo_scoped[2].execute(query))
Esempio n. 17
0
    def test_node_labbook_from_object(self, fixture_working_dir, snapshot):
        lb = LabBook(fixture_working_dir[0])
        lb.new(owner={"username": "******"}, name="cat-lab-book1", description="Test cat labbook from obj")

        query = """
                {
                    node(id: "TGFiYm9vazpkZWZhdWx0JmNhdC1sYWItYm9vazE=") {
                        ... on Labbook {
                            name
                            description
                            activeBranch {
                                refName
                            }
                        }
                        id
                    }
                }
                """

        snapshot.assert_match(fixture_working_dir[2].execute(query))
Esempio n. 18
0
    def test_node_package(self, fixture_working_dir, snapshot):
        lb = LabBook(fixture_working_dir[0])
        lb.new(owner={"username": "******"}, name="node-env-test-lb", description="Example labbook by mutation.")

        env_query = """
        {
            node(id: "UGFja2FnZUNvbXBvbmVudDpwaXAmbnVtcHkmMS4xMg==") {
                id
                ... on PackageComponent {
                    manager
                    package
                    version
                    latestVersion
                }
            }
        }
        """
        results = fixture_working_dir[2].execute(env_query)
        results['data']['node']['manager'] == 'pip'
        results['data']['node']['package'] == 'numpy'
        results['data']['node']['version'] == '1.12'
Esempio n. 19
0
    def test_load_many(self, fixture_working_dir):
        """Test loading many labbooks"""
        lb = LabBook(fixture_working_dir[0])
        lb.new(owner={"username": "******"},
               name="labbook1",
               description="my first labbook1")
        lb.new(owner={"username": "******"},
               name="labbook2",
               description="my first labbook2")
        lb.new(username="******",
               owner={"username": "******"},
               name="labbook2",
               description="my first labbook3")

        loader = LabBookLoader()

        keys = [
            "default&default&labbook1", "default&default&labbook2",
            "default&test3&labbook2"
        ]
        promise1 = loader.load_many(keys)
        assert isinstance(promise1, Promise)

        lb_list = promise1.get()
        assert lb_list[0].name == "labbook1"
        assert lb_list[0].description == "my first labbook1"
        assert lb_list[1].name == "labbook2"
        assert lb_list[1].description == "my first labbook2"
        assert lb_list[2].name == "labbook2"
        assert lb_list[2].description == "my first labbook3"
    def test_custom_docker_snippet_success(
            self, fixture_working_dir_env_repo_scoped):
        """Test adding a custom dependency"""
        lb = LabBook(fixture_working_dir_env_repo_scoped[0])
        labbook_dir = lb.new(name="custom-docker-lb-unittest",
                             description="Testing custom docker and stuff",
                             owner={"username": "******"})
        client = fixture_working_dir_env_repo_scoped[2]
        query = """
        mutation addCustomDocker($labbook_name: String!, $owner: String!, $custom_docker: String!) {
            addCustomDocker(input: {
                owner: $owner,
                labbookName: $labbook_name,
                dockerContent: $custom_docker
            }) {
                updatedEnvironment {
                    dockerSnippet
                }
            }
        }
        """
        vars = {
            'labbook_name': "custom-docker-lb-unittest",
            'owner': 'default',
            'custom_docker': "RUN true"
        }
        r = client.execute(query, variable_values=vars)
        assert 'errors' not in r
        assert r['data']['addCustomDocker']['updatedEnvironment'][
            'dockerSnippet'] == "RUN true"

        remove_query = """
        mutation removeCustomDocker($labbook_name: String!, $owner: String!) {
            removeCustomDocker(input: {
                owner: $owner,
                labbookName: $labbook_name
            }) {
                updatedEnvironment {
                    dockerSnippet
                }
            }
        }
        """
        vars = {
            'labbook_name': "custom-docker-lb-unittest",
            'owner': 'default'
        }
        r = client.execute(remove_query, variable_values=vars)
        assert 'errors' not in r
        assert r['data']['removeCustomDocker']['updatedEnvironment'][
            'dockerSnippet'] == ""
    def test_add_packages_multiple_mgr_error(
            self, fixture_working_dir_env_repo_scoped, snapshot):
        """Test listing labbooks"""
        lb = LabBook(fixture_working_dir_env_repo_scoped[0])

        lb.new(name="catbook-package-tester-mgr-errors",
               description="LB to test package mutation",
               owner={"username": "******"})

        # Test with version missing
        pkg_query = """
        mutation myPkgMutation {
          addPackageComponents (input: {
            owner: "default",
            labbookName: "catbook-package-tester-mgr-errors",
            packages: [{manager: "pip3", package: "requests", version: "2.18.4"},
                       {manager: "conda3", package: "responses", version: "1.4"}]           
            
          }) {
            clientMutationId
            newPackageComponentEdges {
                node{
                  id
                  schema
                  manager
                  package
                  version
                  fromBase
                }
                cursor 
            }
          }
        }
        """
        result = fixture_working_dir_env_repo_scoped[2].execute(pkg_query)
        assert "errors" in result
        assert result['errors'][0][
            'message'] == 'Only batch add packages via 1 package manager at a time.'
Esempio n. 22
0
    def test_node_environment(self, fixture_working_dir, snapshot):
        lb = LabBook(fixture_working_dir[0])
        lb.new(owner={"username": "******"}, name="node-env-test-lb", description="Example labbook by mutation.")

        env_query = """
        {
            node(id: "TGFiYm9vazpkZWZhdWx0Jm5vZGUtZW52LXRlc3QtbGI=") {
                id
                ... on Labbook {
                    name
                    description
                    environment {
                        id
                        imageStatus
                        containerStatus
                    }
                }
            }
        }
        """
        results = fixture_working_dir[2].execute(env_query)
        snapshot.assert_match(results)

        env_id = results['data']['node']['environment']['id']

        env_node_query = """
        {
            node(id: "%s") {
                id
                ... on Environment {
                    imageStatus
                    containerStatus
                }
            }
        }
        """ % env_id
        snapshot.assert_match(fixture_working_dir[2].execute(env_node_query))
    def test_empty_package_counts(self, fixture_working_dir_env_repo_scoped,
                                  snapshot):
        """Test getting the a LabBook's package manager dependencies"""
        # Create labbook
        lb = LabBook(fixture_working_dir_env_repo_scoped[0])
        lb.new(owner={"username": "******"},
               name="labbook4",
               description="my first labbook10000")

        query = """
                    {
                      labbook(owner: "default", name: "labbook4") {
                        overview {
                          numAptPackages
                          numConda2Packages
                          numConda3Packages
                          numPipPackages
                          numCustomDependencies
                        }
                      }
                    }
                    """
        snapshot.assert_match(
            fixture_working_dir_env_repo_scoped[2].execute(query))
    def test_add_package_no_version(self, fixture_working_dir_env_repo_scoped,
                                    snapshot):
        """Test adding a package but omitting the version"""
        lb = LabBook(fixture_working_dir_env_repo_scoped[0])

        labbook_dir = lb.new(name="catbook-package-no-version",
                             description="LB to test package mutation",
                             owner={"username": "******"})

        # Add a base image
        pkg_query = """
        mutation myPkgMutation {
          addPackageComponents (input: {
            owner: "default",
            labbookName: "catbook-package-no-version",
            packages: [{manager: "pip3", package: "requests"}]           
            
          }) {
            clientMutationId
            newPackageComponentEdges {
                node{
                  id
                  schema
                  manager
                  package
                  version
                  fromBase
                }
                cursor 
            }
          }
        }
        """
        result = fixture_working_dir_env_repo_scoped[2].execute(pkg_query)
        assert "errors" in result
        assert result['errors'][0]['message'] == "'version'"
Esempio n. 25
0
    def test_build_image(self, fixture_working_dir_env_repo_scoped,
                         reset_images):
        """Test building a labbook's image"""
        # Create labbook
        lb = LabBook(fixture_working_dir_env_repo_scoped[0])
        lb.new(owner={"username": "******"},
               name="labbook-build1",
               description="building an env")
        # add a base
        cm = ComponentManager(lb)
        cm.add_component("base", "gig-dev_components2", "ut-busybox", 0)

        query = """
        {
            labbook(name: "labbook-build1", owner: "default") {
                environment {
                    imageStatus
                    containerStatus
                }
            }
        }
        """

        r = fixture_working_dir_env_repo_scoped[2].execute(query)
        assert 'errors' not in r
        assert r['data']['labbook']['environment'][
            'imageStatus'] == 'DOES_NOT_EXIST'
        assert r['data']['labbook']['environment'][
            'containerStatus'] == 'NOT_RUNNING'

        # Build the image
        build_query = """
        mutation myBuildImage {
          buildImage(input: {labbookName: "labbook-build1", owner: "default"}) {
            environment {
              imageStatus
              containerStatus
            }
          }
        }
        """

        r = fixture_working_dir_env_repo_scoped[2].execute(build_query)
        import pprint
        pprint.pprint(r)
        assert 'errors' not in r

        assert r['data']['buildImage']['environment']['imageStatus'] in [
            'BUILD_QUEUED', 'BUILD_IN_PROGRESS'
        ]
        assert r['data']['buildImage']['environment'][
            'containerStatus'] == 'NOT_RUNNING'

        ## Sneak in a test for background jobs
        get_bg_jobs_query = """
        {
            labbook(name: "labbook-build1", owner: "default") {
                backgroundJobs {
                    jobKey
                    status
                    failureMessage
                    jobMetadata
                    startedAt
                    result
                }
            }
        }
        """
        r = fixture_working_dir_env_repo_scoped[2].execute(get_bg_jobs_query)
        assert 'errors' not in r, "There should be no errors when querying for background job status"
        assert r['data']['labbook']['backgroundJobs'][0][
            'status'], "Background Jobs status query should not be None"
        pprint.pprint(r)

        # Wait for build to succeed for up to TIMEOUT_MAX seconds
        success = False
        for _ in range(TIMEOUT_MAX):
            result = fixture_working_dir_env_repo_scoped[2].execute(query)

            if result['data']['labbook']['environment'][
                    'imageStatus'] == 'EXISTS':
                success = True
                break

            assert result['data']['labbook']['environment'][
                'imageStatus'] == 'BUILD_IN_PROGRESS'

            time.sleep(1)

        r = fixture_working_dir_env_repo_scoped[2].execute(get_bg_jobs_query)
        assert 'errors' not in r
        assert r['data']['labbook']['backgroundJobs'][0][
            'status'] == 'finished'
        assert r['data']['labbook']['backgroundJobs'][0]['result'].isalnum()
        assert 'build_image' in r['data']['labbook']['backgroundJobs'][0][
            'jobMetadata']
        pprint.pprint(r)

        assert success is True, f"Failed to build within {TIMEOUT_MAX} second timeout."

        r = fixture_working_dir_env_repo_scoped[2].execute(query)
        assert 'errors' not in r
        assert r['data']['labbook']['environment']['imageStatus'] == 'EXISTS'
        assert r['data']['labbook']['environment'][
            'containerStatus'] == 'NOT_RUNNING'
    def test_get_package_manager(self, fixture_working_dir_env_repo_scoped,
                                 snapshot):
        """Test getting the a LabBook's package manager dependencies"""
        # Create labbook
        lb = LabBook(fixture_working_dir_env_repo_scoped[0])
        lb.new(owner={"username": "******"},
               name="labbook4",
               description="my first labbook10000")

        query = """
                    {
                      labbook(owner: "default", name: "labbook4") {
                        environment {
                         packageDependencies {
                            edges {
                              node {
                                id
                                schema
                                manager
                                package
                                version
                                fromBase
                              }
                              cursor
                            }
                            pageInfo {
                              hasNextPage
                            }
                          }
                        }
                      }
                    }
                    """
        # should be null
        snapshot.assert_match(
            fixture_working_dir_env_repo_scoped[2].execute(query))

        # Add a base image
        cm = ComponentManager(lb)
        pkgs = [{
            "manager": "pip",
            "package": "requests",
            "version": "1.3"
        }, {
            "manager": "pip",
            "package": "numpy",
            "version": "1.12"
        }]
        cm.add_packages('pip', pkgs)

        # Add one package without a version, which should cause an error in the API since version is required
        pkgs = [{
            "manager": "apt",
            "package": "docker",
            "version": ""
        }, {
            "manager": "apt",
            "package": "lxml",
            "version": "3.4"
        }]
        cm.add_packages('apt', pkgs)

        # Test again
        snapshot.assert_match(
            fixture_working_dir_env_repo_scoped[2].execute(query))

        query = """
                   {
                     labbook(owner: "default", name: "labbook4") {
                       environment {
                        packageDependencies(first: 2, after: "MA==") {
                            edges {
                              node {
                                id
                                manager
                                package
                                version
                                fromBase
                              }
                              cursor
                            }
                            pageInfo {
                              hasNextPage
                            }
                          }
                       }
                     }
                   }
                   """
        r1 = fixture_working_dir_env_repo_scoped[2].execute(query)
        assert 'errors' not in r1
        snapshot.assert_match(r1)
Esempio n. 27
0
    def test_build_image_no_cache(self, fixture_working_dir_env_repo_scoped,
                                  reset_images):
        """Test building a labbook's image"""
        # Create labbook
        lb = LabBook(fixture_working_dir_env_repo_scoped[0])
        lb.new(owner={"username": "******"},
               name="labbook-build2",
               description="building an env")
        # add a base
        cm = ComponentManager(lb)
        cm.add_component("base", "gig-dev_components2", "ut-busybox", 0)

        query = """
        {
            labbook(name: "labbook-build2", owner: "default") {
                environment {
                    imageStatus
                    containerStatus
                }
            }
        }
        """

        r = fixture_working_dir_env_repo_scoped[2].execute(query)
        assert 'errors' not in r
        assert r['data']['labbook']['environment'][
            'imageStatus'] == 'DOES_NOT_EXIST'
        assert r['data']['labbook']['environment'][
            'containerStatus'] == 'NOT_RUNNING'

        # Build the image
        build_query = """
        mutation myBuildImage {
          buildImage(input: {labbookName: "labbook-build2", owner: "default", noCache: true}) {
            environment {
              imageStatus
              containerStatus
            }
          }
        }
        """
        r = fixture_working_dir_env_repo_scoped[2].execute(build_query)
        assert 'errors' not in r
        assert r['data']['buildImage']['environment']['imageStatus'] in [
            'BUILD_QUEUED', 'BUILD_IN_PROGRESS'
        ]
        assert r['data']['buildImage']['environment'][
            'containerStatus'] == 'NOT_RUNNING'

        # Wait for build to succeed for up to TIMEOUT_MAX seconds
        success = False
        for _ in range(TIMEOUT_MAX):
            result = fixture_working_dir_env_repo_scoped[2].execute(query)

            if result['data']['labbook']['environment'][
                    'imageStatus'] == 'EXISTS':
                success = True
                break

            assert result['data']['labbook']['environment'][
                'imageStatus'] == 'BUILD_IN_PROGRESS'

            time.sleep(1)

        assert success is True, f"Failed to build within {TIMEOUT_MAX} second timeout."

        r = fixture_working_dir_env_repo_scoped[2].execute(query)
        assert 'errors' not in r
        assert r['data']['labbook']['environment']['imageStatus'] == 'EXISTS'
        assert r['data']['labbook']['environment'][
            'containerStatus'] == 'NOT_RUNNING'
    def mutate_and_get_payload(cls,
                               root,
                               info,
                               name,
                               description,
                               repository,
                               component_id,
                               revision,
                               is_untracked=False,
                               client_mutation_id=None):
        username = get_logged_in_username()

        # Create a new empty LabBook
        lb = LabBook(author=get_logged_in_author())
        # TODO: Set owner/namespace properly once supported fully
        lb.new(owner={"username": username},
               username=username,
               name=name,
               description=description,
               bypass_lfs=is_untracked)

        if is_untracked:
            FileOperations.set_untracked(lb, 'input')
            FileOperations.set_untracked(lb, 'output')
            input_set = FileOperations.is_set_untracked(lb, 'input')
            output_set = FileOperations.is_set_untracked(lb, 'output')
            if not (input_set and output_set):
                raise ValueError(
                    f'{str(lb)} untracking for input/output in malformed state'
                )
            if not lb.is_repo_clean:
                raise ValueError(
                    f'{str(lb)} should have clean Git state after setting for untracked'
                )

        # Create a Activity Store instance
        store = ActivityStore(lb)

        # Create detail record
        adr = ActivityDetailRecord(ActivityDetailType.LABBOOK,
                                   show=False,
                                   importance=0)
        adr.add_value('text/plain', f"Created new LabBook: {username}/{name}")

        # Create activity record
        ar = ActivityRecord(ActivityType.LABBOOK,
                            message=f"Created new LabBook: {username}/{name}",
                            show=True,
                            importance=255,
                            linked_commit=lb.git.commit_hash)
        ar.add_detail_object(adr)

        # Store
        store.create_activity_record(ar)

        # Add Base component
        cm = ComponentManager(lb)
        cm.add_component("base", repository, component_id, revision)

        # Prime dataloader with labbook you just created
        dataloader = LabBookLoader()
        dataloader.prime(f"{username}&{username}&{lb.name}", lb)

        # Get a graphene instance of the newly created LabBook
        return CreateLabbook(labbook=Labbook(owner=username, name=lb.name))
def mock_create_labbooks(fixture_working_dir):
    # Create a labbook in the temporary directory
    lb = LabBook(fixture_working_dir[0])
    lb.new(owner={"username": "******"}, name="labbook1", description="Test labbook 1")

    yield fixture_working_dir
Esempio n. 30
0
    def test_list_remote_labbooks_az(self, fixture_working_dir, snapshot):
        """test list labbooks"""
        lb = LabBook(fixture_working_dir[0])
        lb.new(username='******',
               owner={"username": "******"},
               name="test11",
               description="my first labbook1")

        responses.add(responses.GET,
                      'https://usersrv.gigantum.io/key',
                      json={'key': 'afaketoken'},
                      status=200)
        dummy_data = [{
            "id": 118,
            "name": "test11",
            "name_with_namespace": "testuser / test11",
            "path_with_namespace": "testuser/test11",
            "created_at": "2018-04-19T19:06:11.009Z",
            "last_activity_at": "2018-04-19T22:08:05.974Z",
            "visibility": "private",
            "owner": {
                "id": 14,
                "name": "testuser",
                "username": "******",
                "state": "active",
            },
            "creator_id": 14,
            "namespace": {
                "id": 14,
                "name": "testuser",
                "path": "testuser",
                "kind": "user",
                "full_path": "testuser"
            },
            "import_status": "none",
            "permissions": {
                "project_access": {
                    "access_level": 30,
                    "notification_level": 3
                },
            }
        }, {
            "id": 138,
            "name": "test2",
            "name_with_namespace": "testuser / test2",
            "path_with_namespace": "testuser/test2",
            "created_at": "2018-04-19T19:36:11.009Z",
            "last_activity_at": "2018-04-19T20:58:05.974Z",
            "visibility": "private",
            "owner": {
                "id": 14,
                "name": "testuser",
                "username": "******",
                "state": "active",
            },
            "creator_id": 14,
            "namespace": {
                "id": 14,
                "name": "testuser",
                "path": "testuser",
                "kind": "user",
                "full_path": "testuser"
            },
            "import_status": "none",
            "permissions": {
                "project_access": {
                    "access_level": 30,
                    "notification_level": 3
                },
            }
        }]

        responses.add(responses.GET,
                      'https://repo.gigantum.io/api/v4/projects/',
                      json=dummy_data,
                      status=200)

        list_query = """
                    {
                    labbookList{
                      remoteLabbooks(sort: "az", reverse: false){
                        edges{
                          node{
                            id
                            description
                            creationDateUtc
                            modifiedDateUtc
                            name
                            owner
                            isLocal
                          }
                          cursor
                        }
                        pageInfo{
                          hasNextPage
                        }
                      }
                    }
                    }"""

        r = fixture_working_dir[2].execute(list_query)
        print(r)
        assert 'errors' not in r
        snapshot.assert_match(r)

        list_query = """
                    {
                    labbookList{
                      remoteLabbooks(sort: "modified_on", reverse: false){
                        edges{
                          node{
                            id
                            description
                            creationDateUtc
                            modifiedDateUtc
                            name
                            owner
                          }
                          cursor
                        }
                        pageInfo{
                          hasNextPage
                        }
                      }
                    }
                    }"""

        r = fixture_working_dir[2].execute(list_query)
        assert 'errors' not in r
        snapshot.assert_match(r)