예제 #1
0
    def test_ns_terminate_asynchronous_tasks(self, mock_request, mock_sleep):
        mock_request.side_effect = [
            ({
                'status': '200'
            }, '{"result": "0"}'.encode('utf-8')),
            ({
                'status': '200'
            }, '{"jobId": "zzz"}'.encode('utf-8')),
            ({
                'status': '200'
            }, '{"responseDescriptor": {"progress": 100, "responseId": 1, '
             '"statusDescription": ""}}'.encode('utf-8')),
            ({
                'status': '200'
            }, '{"result": "0"}'.encode('utf-8')),
            ({
                'status': '200'
            }, '{"result": "0"}'.encode('utf-8'))
        ]
        mock_sleep.return_value = None

        TerminateNsService(self.ns_inst_id, self.job_id,
                           TERMINATE_NS_DICT).run()
        self.assertEqual(
            JobModel.objects.filter(jobid=self.job_id).first().progress,
            JOB_PROGRESS.FINISHED)
예제 #2
0
    def test_ns_terminate_asynchronous_tasks_when_no_new_progress(
            self, mock_request, mock_sleep):
        ns_instance_id = 'test_ns_terminate_when_no_new_progress'
        NSInstModel(id=ns_instance_id).save()
        NfInstModel(ns_inst_id=ns_instance_id).save()
        mock_request.side_effect = [
            ({
                'status': '200'
            }, '{"jobId": "zzz"}'.encode('utf-8')),
            ({
                'status': '200'
            }, '{}'.encode('utf-8')),
            ({
                'status': '200'
            }, '{"responseDescriptor": {"progress": 100, "responseId": 1, '
             '"statusDescription": ""}}'.encode('utf-8'))
        ]
        mock_sleep.return_value = None

        job_id = JobUtil.create_job(JOB_TYPE.NS, JOB_ACTION.TERMINATE,
                                    ns_instance_id)
        TerminateNsService(ns_instance_id, job_id, TERMINATE_NS_DICT).run()
        self.assertEqual(
            JobModel.objects.filter(jobid=job_id).first().progress,
            JOB_PROGRESS.FINISHED)
예제 #3
0
 def test_ns_terminate_asynchronous_tasks_with_none(self):
     ns_instance_id = 'test_ns_terminate_002'
     job_id = JobUtil.create_job(JOB_TYPE.NS, JOB_ACTION.TERMINATE,
                                 ns_instance_id)
     TerminateNsService(ns_instance_id, job_id, TERMINATE_NS_DICT).run()
     self.assertEqual(
         JobModel.objects.filter(jobid=job_id).first().progress,
         JOB_PROGRESS.FINISHED)
예제 #4
0
    def test_terminate_ns_service(self, mock_call_req):
        job_id = JobUtil.create_job(JOB_TYPE.NS, JOB_ACTION.TERMINATE,
                                    self.ns_inst_id)

        mock_vals = {
            "/api/nslcm/v1/ns/ns_vls/1":
            [0, json.JSONEncoder().encode({"jobId": self.job_id}), '200'],
            "/api/nslcm/v1/ns/ns_sfcs/1":
            [0, json.JSONEncoder().encode({"jobId": self.job_id}), '200'],
            "/api/nslcm/v1/ns/ns_vnfs/1":
            [0, json.JSONEncoder().encode({}), '200'],
            "/api/ztevnfmdriver/v1/jobs/" + self.job_id + "&responseId=0": [
                0,
                json.JSONEncoder().encode({
                    "jobid": self.job_id,
                    "responsedescriptor": {
                        "progress":
                        "100",
                        "status":
                        JOB_MODEL_STATUS.FINISHED,
                        "responseid":
                        "3",
                        "statusdescription":
                        "creating",
                        "errorcode":
                        "0",
                        "responsehistorylist": [{
                            "progress": "0",
                            "status": JOB_MODEL_STATUS.PROCESSING,
                            "responseid": "2",
                            "statusdescription": "creating",
                            "errorcode": "0"
                        }]
                    }
                }), '200'
            ],
            "/api/catalog/v1/ns_descriptors/None":
            [0, json.JSONEncoder().encode({}), '202'],
        }

        def side_effect(*args):
            return mock_vals[args[4]]

        mock_call_req.side_effect = side_effect
        req_data = {
            "terminationType": "FORCEFUL",
            "gracefulTerminationTimeout": "600"
        }
        TerminateNsService(self.ns_inst_id, job_id, req_data).run()
        nsinst = NSInstModel.objects.get(id=self.ns_inst_id)
        if nsinst:
            self.assertTrue(1, 0)
        else:
            self.assertTrue(1, 1)
예제 #5
0
    def post(self, request, ns_instance_id):
        job_id = JobUtil.create_job(JOB_TYPE.NS, JOB_ACTION.TERMINATE,
                                    ns_instance_id)

        logger.debug("Enter TerminateNSView::post %s", request.data)
        req_serializer = TerminateNsReqSerializer(data=request.data)
        if not req_serializer.is_valid():
            logger.debug("request.data is not valid,error: %s" %
                         req_serializer.errors)
            raise BadRequestException(req_serializer.errors)
        termination_time = ignore_case_get(request.data, 'terminationTime')
        logger.debug("terminationTime is %s" % termination_time)
        # todo terminationTime
        terminate_ns_service = TerminateNsService(ns_instance_id, job_id,
                                                  request.data)
        terminate_ns_service.start()
        logger.debug("Location: %s" % terminate_ns_service.occ_id)
        response = Response(data={'jobId': job_id},
                            status=status.HTTP_202_ACCEPTED)
        response["Location"] = NS_OCC_BASE_URI % terminate_ns_service.occ_id
        logger.debug("Leave TerminateNSView")
        return response
예제 #6
0
    def post(self, request, ns_instance_id):
        logger.debug("Enter TerminateNSView::post %s", request.data)
        req_serializer = _TerminateNsReqSerializer(data=request.data)
        if not req_serializer.is_valid():
            raise BadRequestException(req_serializer.errors)

        job_id = JobUtil.create_job(JOB_TYPE.NS, JOB_ACTION.TERMINATE, ns_instance_id)
        time.sleep(2)
        TerminateNsService(ns_instance_id, job_id, request.data).start()

        resp_serializer = _NsOperateJobSerializer(data={'jobId': job_id})
        if not resp_serializer.is_valid():
            raise NSLCMException(resp_serializer.errors)

        logger.debug("Leave TerminateNSView::post ret=%s", {'jobId': job_id})
        return Response(data={'jobId': job_id}, status=status.HTTP_202_ACCEPTED)
예제 #7
0
    def test_ns_terminate_asynchronous_tasks_when_terminate_vnf_failed(
            self, mock_request, mock_sleep):
        ns_instance_id = 'test_ns_terminate_when_terminate_vnf_failed'
        NSInstModel(id=ns_instance_id).save()
        NfInstModel(ns_inst_id=ns_instance_id).save()
        mock_request.side_effect = [({
            'status': '404'
        }, '{"jobId": "zzz"}'.encode('utf-8'))]
        mock_sleep.return_value = None

        job_id = JobUtil.create_job(JOB_TYPE.NS, JOB_ACTION.TERMINATE,
                                    ns_instance_id)
        TerminateNsService(ns_instance_id, job_id, TERMINATE_NS_DICT).run()
        self.assertEqual(
            JobModel.objects.filter(jobid=job_id).first().progress,
            JOB_PROGRESS.FINISHED)