Пример #1
0
    def test_add_data_ok(self):

        # add associated data opener
        dataopener_name = 'slide opener'
        DataOpener.objects.create(name=dataopener_name, script=self.script)

        url = reverse('substrapp:data-list')

        data = {
            'features': self.data_features,
            'labels': self.data_labels,
            'name': 'liver slide',
            'problems': [compute_hash(self.problem_description)],
            'data_opener': dataopener_name,
            'permissions': 'all'
        }
        extra = {
            'HTTP_ACCEPT': 'application/json;version=0.0',
        }
        response = self.client.post(url, data, format='multipart', **extra)
        r = response.json()

        self.assertEqual(r['pkhash'], compute_hash(self.data_features))
        self.assertEqual(
            r['features'], 'http://testserver/media/data/%s/%s' %
            (r['pkhash'], self.data_features_filename))
        self.assertEqual(
            r['labels'], 'http://testserver/media/data/%s/%s' %
            (r['pkhash'], self.data_labels_filename))

        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
Пример #2
0
    def test_add_learnuplet_ko(self):
        url = reverse('substrapp:learnuplet-list')

        data = {
            'problem':
            'a' * 64,
            'train_data': [
                '5c1d9cd1c2c1082dde0921b56d11030c81f62fbb51932758b58ac2569dd0b422'
            ],
            'model':
            '5c1d9cd1c2c1082dde0921b56d11030c81f62fbb51932758b58ac2569dd0a088'
        }

        extra = {
            'HTTP_ACCEPT': 'application/json;version=0.0',
        }

        response = self.client.post(url, data, format='multipart', **extra)
        r = response.json()
        self.assertIn('does not exist', r['message'])
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)

        Problem.objects.create(description=self.problem_description,
                               metrics=self.problem_metrics)
        data = {'problem': compute_hash(self.problem_description)}
        response = self.client.post(url, data, format='multipart', **extra)
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
Пример #3
0
    def test_add_algo_ok(self):

        # add associated problem
        Problem.objects.create(description=self.problem_description,
                               metrics=self.problem_metrics)

        url = reverse('substrapp:algo-list')

        data = {
            'algo': self.script,
            'name': 'super top algo',
            'problem': compute_hash(self.problem_description),
            'permissions': 'all'
        }
        extra = {
            'HTTP_ACCEPT': 'application/json;version=0.0',
        }
        response = self.client.post(url, data, format='multipart', **extra)
        r = response.json()

        self.assertEqual(r['pkhash'], compute_hash(self.script))
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
Пример #4
0
    def test_add_algo_ko(self):
        url = reverse('substrapp:algo-list')

        # non existing associated problem
        data = {
            'algo': self.script,
            'name': 'super top algo',
            'problem': 'non existing problem',
            'permissions': 'all'
        }
        extra = {
            'HTTP_ACCEPT': 'application/json;version=0.0',
        }
        response = self.client.post(url, data, format='multipart', **extra)
        r = response.json()
        self.assertIn('does not exist', r['message'])
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)

        Problem.objects.create(description=self.problem_description,
                               metrics=self.problem_metrics)

        # missing local storage field
        data = {
            'name': 'super top algo',
            'problem': compute_hash(self.problem_description),
            'permissions': 'all'
        }
        response = self.client.post(url, data, format='multipart', **extra)
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)

        # missing ledger field
        data = {
            'algo': self.script,
            'problem': compute_hash(self.problem_description),
        }
        response = self.client.post(url, data, format='multipart', **extra)
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
Пример #5
0
    def test_add_dataopener_ok(self):
        url = reverse('substrapp:dataopener-list')

        data = {'name': 'slide opener', 'script': self.script}
        extra = {
            'HTTP_ACCEPT': 'application/json;version=0.0',
        }

        response = self.client.post(url, data, format='multipart', **extra)
        r = response.json()

        self.assertEqual(r['pkhash'], compute_hash(self.script))
        self.assertEqual(
            r['script'], 'http://testserver/media/dataopeners/%s/%s' %
            (r['pkhash'], self.script_filename))

        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
Пример #6
0
    def test_add_algo_no_version(self):

        # add associated problem
        Problem.objects.create(description=self.problem_description,
                               metrics=self.problem_metrics)

        url = reverse('substrapp:algo-list')

        data = {
            'algo': self.script,
            'name': 'super top algo',
            'problem': compute_hash(self.problem_description),
            'permissions': 'all'
        }
        response = self.client.post(url, data, format='multipart')
        r = response.json()

        self.assertEqual(r, {'detail': 'A version is required.'})
        self.assertEqual(response.status_code, status.HTTP_406_NOT_ACCEPTABLE)
Пример #7
0
    def test_add_learnuplet_no_version(self):
        # Add associated problem
        description, _, metrics, _ = get_sample_problem()
        Problem.objects.create(description=description, metrics=metrics)
        # post data
        url = reverse('substrapp:learnuplet-list')

        data = {
            'problem':
            compute_hash(description),
            'train_data': [
                '5c1d9cd1c2c1082dde0921b56d11030c81f62fbb51932758b58ac2569dd0b422'
            ],
            'model':
            '5c1d9cd1c2c1082dde0921b56d11030c81f62fbb51932758b58ac2569dd0a088'
        }

        response = self.client.post(url, data, format='multipart')
        r = response.json()
        self.assertEqual(r, {'detail': 'A version is required.'})
        self.assertEqual(response.status_code, status.HTTP_406_NOT_ACCEPTABLE)
Пример #8
0
    def test_add_data_no_version(self):

        # add associated data opener
        dataopener_name = 'slide opener'
        DataOpener.objects.create(name=dataopener_name, script=self.script)

        url = reverse('substrapp:data-list')

        data = {
            'features': self.data_features,
            'labels': self.data_labels,
            'name': 'liver slide',
            'problems': [compute_hash(self.problem_description)],
            'data_opener': dataopener_name,
            'permissions': 'all'
        }
        response = self.client.post(url, data, format='multipart')
        r = response.json()

        self.assertEqual(r, {'detail': 'A version is required.'})
        self.assertEqual(response.status_code, status.HTTP_406_NOT_ACCEPTABLE)
Пример #9
0
    def test_add_learnuplet_ok(self):
        # Add associated problem
        description, _, metrics, _ = get_sample_problem()
        Problem.objects.create(description=description, metrics=metrics)
        # post data
        url = reverse('substrapp:learnuplet-list')

        data = {
            'problem':
            compute_hash(description),
            'train_data': [
                '5c1d9cd1c2c1082dde0921b56d11030c81f62fbb51932758b58ac2569dd0b422'
            ],
            'model':
            '5c1d9cd1c2c1082dde0921b56d11030c81f62fbb51932758b58ac2569dd0a088'
        }
        extra = {
            'HTTP_ACCEPT': 'application/json;version=0.0',
        }

        response = self.client.post(url, data, format='multipart', **extra)
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
Пример #10
0
    def test_add_algo_wrong_version(self):

        # add associated problem
        Problem.objects.create(description=self.problem_description,
                               metrics=self.problem_metrics)

        url = reverse('substrapp:algo-list')

        data = {
            'algo': self.script,
            'name': 'super top algo',
            'problem': compute_hash(self.problem_description),
            'permissions': 'all'
        }
        extra = {
            'HTTP_ACCEPT': 'application/json;version=-1.0',
        }
        response = self.client.post(url, data, format='multipart', **extra)
        r = response.json()

        self.assertEqual(r, {'detail': 'Invalid version in "Accept" header.'})
        self.assertEqual(response.status_code, status.HTTP_406_NOT_ACCEPTABLE)
Пример #11
0
    def test_add_problem_ok(self):
        url = reverse('substrapp:problem-list')

        data = {
            'name':
            'tough problem',
            'test_data': [
                '5c1d9cd1c2c1082dde0921b56d11030c81f62fbb51932758b58ac2569dd0b379',
                '5c1d9cd1c2c1082dde0921b56d11030c81f62fbb51932758b58ac2569dd0b389'
            ],
            'description':
            self.problem_description,
            'metrics':
            self.problem_metrics,
        }

        extra = {
            'HTTP_ACCEPT': 'application/json;version=0.0',
        }

        with mock.patch.object(LedgerProblemSerializer,
                               'create') as mocked_method:
            mocked_method.return_value = {}, status.HTTP_201_CREATED
            response = self.client.post(url, data, format='multipart', **extra)
            r = response.json()

            self.assertEqual(r['pkhash'],
                             compute_hash(self.problem_description))
            self.assertEqual(r['validated'], False)
            self.assertEqual(
                r['description'], 'http://testserver/media/problems/%s/%s' %
                (r['pkhash'], self.problem_description_filename))
            self.assertEqual(
                r['metrics'], 'http://testserver/media/problems/%s/%s' %
                (r['pkhash'], self.problem_metrics_filename))

            self.assertEqual(response.status_code, status.HTTP_201_CREATED)
Пример #12
0
    def test_add_data_wrong_version(self):

        # add associated data opener
        dataopener_name = 'slide opener'
        DataOpener.objects.create(name=dataopener_name, script=self.script)

        url = reverse('substrapp:data-list')

        data = {
            'features': self.data_features,
            'labels': self.data_labels,
            'name': 'liver slide',
            'problems': [compute_hash(self.problem_description)],
            'data_opener': dataopener_name,
            'permissions': 'all'
        }
        extra = {
            'HTTP_ACCEPT': 'application/json;version=-1.0',
        }
        response = self.client.post(url, data, format='multipart', **extra)
        r = response.json()

        self.assertEqual(r, {'detail': 'Invalid version in "Accept" header.'})
        self.assertEqual(response.status_code, status.HTTP_406_NOT_ACCEPTABLE)
Пример #13
0
 def test_create_data(self):
     features, _, labels, _ = get_sample_data()
     data = Data.objects.create(features=features, labels=labels)
     self.assertEqual(data.pkhash, compute_hash(features))
     self.assertFalse(data.validated)
Пример #14
0
 def test_create_data_opener(self):
     script, _ = get_sample_script()
     data_opener = DataOpener.objects.create(script=script,
                                             name="slides_opener")
     self.assertEqual(data_opener.pkhash, compute_hash(script))
Пример #15
0
 def test_create_problem(self):
     description, _, metrics, _ = get_sample_problem()
     problem = Problem.objects.create(description=description,
                                      metrics=metrics)
     self.assertEqual(problem.pkhash, compute_hash(description))
     self.assertFalse(problem.validated)
Пример #16
0
 def test_create_algo(self):
     script, _ = get_sample_script()
     algo = Algo.objects.create(algo=script)
     self.assertEqual(algo.pkhash, compute_hash(script))
     self.assertFalse(algo.validated)