Skip to content
AtsSccas_TCFunctions.ttcn 86.3 KiB
Newer Older
Steffen Ludtke's avatar
Steffen Ludtke committed
/*
 *    @author     TTF T016
 *    @version    $Id$
 *    @desc       This module provides the TCfunctions used by the test component
 *              for SCCAS tests.
 */
module AtsSccas_TCFunctions {

    // XSD support
    import from XSD all;

    // LibCommon
    import from LibCommon_Sync all;
    import from LibCommon_VerdictControl all;
    import from LibCommon_DataStrings all;

    // LibSip
    import from LibSip_SIPTypesAndValues all;
    import from LibSip_SDPTypes all;
    import from LibSip_Templates all;
    import from LibSip_Steps all;
    import from LibSip_Interface all;
    import from LibSip_PIXITS all;

    // LibIms
    import from LibIms_Templates all;
    import from LibIms_Steps all;
    import from LibIms_SIPTypesAndValues all;
    import from LibIms_Interface all;

    // AtsSccas
    // import from AtsSccas_TestSystem all;
    import from AtsSccas_Templates all;
    import from AtsSccas_Steps all;
    import from AtsSccas_PICS all;
    import from AtsSccas_PIXITS all;
    import from AtsSccas_TestConfiguration all;

    group Group_6_3 {

        group TP_6_3_1_General {

            /**
             *  @desc    Verify that the SCCAS successfully obtain/processes 3pty registration information
             *  @param   p_cSeq_s Random CSeq REGISTER number
             */
            function f_TC_ISC_SCCAS_RSC_REG_01(in CSeq p_cSeq_s)
            runs on ImsComponent {
                // Local variables
                var CSeq v_cSeq_s := p_cSeq_s;

                // Preambule
                f_init_userprofile(c_userProfile_UE1atSUThome);
                f_initSipUrl(c_serviceProfile_EMERGENCY);
                f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF1);
                action("Please register UE");
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync

                // Registration
                f_setHeaders_REGISTER(v_cSeq_s);
                f_SendREGISTER(
                               m_sccas_register(
                                                vc_requestUri, 
                                                vc_callId, 
                                                vc_cSeq, 
                                                vc_from, 
                                                vc_to, 
                                                vc_via_REG, 
                                                vc_contact, 
                                                m_add_Authorization_digest(
                                                                            vc_authorization, 
                                                                            {c_Integrity_protected_no}
                                                                            ), 
                                                PX_IMS_SUT_SCSCF_IPADDR, // TODO To be refined during validation
                                                PX_IMS_SUT_SCSCF_PORT, // TODO To be refined during validation
                                                "600000",
                                                -,
                                                m_contentType(c_sdpApplication), // TODO To be refined during validation
                                                m_MBody_SDP(vc_sdp_local) // TODO To be refined during validation
                                ));
                tc_ack.start;
                alt {
                    [] SIPP.receive(mw_sccas_Response_2xxonREGISTER(vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact)) {
                        tc_ack.stop;
                        log("*** " & __SCOPE__ & ": PASS: 200 OK message was received ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // sync
                    }
                    [] tc_ack.timeout {
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error); // sync 
                    }
                }

                // TODO Deregistration?
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

            } // End of function f_TC_ISC_SCCAS_RSC_REG_01

            /**
             *  @desc    Verify that the SCCAS successfully obtain/processes de-registration information (Expires=0)
             *  @param   p_cSeq_s Random CSeq REGISTER number
             */
            function f_TC_ISC_SCCAS_RSC_REG_02(in CSeq p_cSeq_s)
            runs on ImsComponent {
                // Local variables
                var CSeq v_cSeq_s := p_cSeq_s;

                // Preambule
                f_init_userprofile(c_userProfile_UE1atSUThome);
                f_initSipUrl(c_serviceProfile_EMERGENCY);
                f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF1);
                action("Please register UE");
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync

                // Registration
                f_setHeaders_REGISTER(v_cSeq_s);
                f_SendREGISTER(
                               m_sccas_register(
                                                vc_requestUri, 
                                                vc_callId, 
                                                vc_cSeq, 
                                                vc_from, 
                                                vc_to, 
                                                vc_via_REG, 
                                                vc_contact, 
                                                omit, 
                                                PX_IMS_SUT_SCSCF_IPADDR, // TODO To be refined during validation
                                                PX_IMS_SUT_SCSCF_PORT, // TODO To be refined during validation
                                                "0" // Expired
                                ));
                tc_ack.start;
                alt {
                    [] SIPP.receive(mw_sccas_Response_2xxonREGISTER(vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact)) {
                        tc_ack.stop;
                        log("*** " & __SCOPE__ & ": PASS: 200 OK message was received ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // sync
                    }
                    [] tc_ack.timeout {
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error); // sync 
                    }
                }

                // TODO Deregistration?
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

            } // End of function f_TC_ISC_SCCAS_RSC_REG_02

        } // End of group TP_6_3_1_General
          
        group TP_6_3_2_Triggers_To_ATCF {
            
            /**
             *  @desc    Verify that the SCCAS successfully obtain/processes SRVCC information
             *  @param   p_cSeq_s Random CSeq REGISTER number
             */
            function f_TC_ISC_SCCAS_RSC_REG_03(in CSeq p_cSeq_s)
            runs on ImsComponent {
                // Local variables
                var CSeq v_cSeq_s := p_cSeq_s;
                var template(value) REGISTER_Request m_register3ptyUe;
                var template(value) RequestUnion m_req;
                var template(value) Response m_ResponseReg_3ptyUe;

                // Preamble
                f_init_userprofile(c_userProfile_PCSCFwithHomeUE);
                f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF1);
                f_initSipUrl(c_userProfile_PCSCFwithHomeUE);
                //Registration
                f_setHeaders_REGISTER(v_cSeq_s);//UE REGISTER
                m_register3ptyUe :=  m_register_ue_srvcc(
                                                    vc_requestUri, 
                                                    vc_callId, 
                                                    vc_cSeq, 
                                                    vc_from, 
                                                    vc_to, 
                                                    vc_via_REG, 
                                                    vc_contact, 
                                                    m_add_Authorization_digest(
                                                                                vc_authorization, 
                                                                                {c_Integrity_protected_no}
                                                                                ), 
                                                    PX_IMS_SUT_SCSCF_IPADDR, // TODO To be refined during validation
                                                    PX_IMS_SUT_SCSCF_PORT, // TODO To be refined during validation
                                                    "600000",
                                                    m_sccas_featureCaps({m_fcValue("g3gppAtcfFeatureCapabilityIndicator")}),
                                                    omit,
                                                    omit
                                                    );
                m_req:= {Register:=valueof(m_register3ptyUe)};
                m_ResponseReg_3ptyUe :=  m_Response_2xxonREGISTER_IMS(
                                                                c_statusLine200,
                                                                vc_callId,
                                                                p_cSeq_s,
                                                                vc_from,
                                                                vc_to,
                                                                vc_via_REG,
                                                                vc_contact,
                                                                m_SipUrl_currDomain(vc_userprofile),
                                                                vc_from.addressField.nameAddr.addrSpec
                                                                );
                
                f_init_userprofile(c_userProfile_SCSCFwithHomeUE);
                f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_AS); //AS as SCCAS
                f_initSipUrl(c_userProfile_SCSCFwithHomeUE);
                
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync preambleDone

                f_setHeaders_REGISTER_AS(v_cSeq_s);//AS INTERFACE REGISTER
                f_SendREGISTER(
                               m_REGISTER_Request_AS(
                                                vc_requestUri, 
                                                vc_callId, 
                                                vc_cSeq, 
                                                vc_from, 
                                                vc_to, 
                                                vc_via_REG, 
                                                vc_contact, 
                                                -,
                                                "600000",
                                                m_contentType("multipart/mixed",{m_contentTypeBoundary(c_boundary)}) ,
                                                m_MBody_MIME_SipReqResp(c_boundary,m_req,m_ResponseReg_3ptyUe)
                                ));
                tc_ack.start;
                alt {
                    [] SIPP.receive(mw_Response_2xxonREGISTER_AS(vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact)) {
                        tc_ack.stop;
                        log("*** " & __SCOPE__ & ": PASS: 200 OK message was received ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // sync
                    }
                    [] tc_ack.timeout {
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error); // sync 
                    }
                }

                //Deregistration
                f_SendREGISTER(
                               m_REGISTER_Request_AS(
                                                vc_requestUri, 
                                                vc_callId, 
                                                vc_cSeq, 
                                                vc_from, 
                                                vc_to, 
                                                vc_via_REG, 
                                                vc_contact, 
                                                -,
                                                "0",
                                                - ,
                                                -)
                                );
                tc_ack.start;
                alt {
                    [] SIPP.receive(mw_Response_2xxonREGISTER_AS(vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact)) {
                        tc_ack.stop;
                        log("*** " & __SCOPE__ & ": PASS: 200 OK message was received ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // sync
                    }
                    [] tc_ack.timeout {
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error); // sync 
                    }
                }
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

            } // End of function f_TC_ISC_SCCAS_RSC_REG_03
Steffen Ludtke's avatar
Steffen Ludtke committed
265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674


        } // End of group TP_6_3_2_Triggers_To_ATCF

        group TP_6_3_3_SRVCC_Information_To_ATCF {

            /**
             *  @desc    Verify that the SCCAS successfully sends MESSAGE providing PS to CS SRVCC information
             *  @param   p_cSeq_s Random CSeq REGISTER number
             */
            function f_TC_ISC_SCCAS_RSC_REG_04_ueims(in CSeq p_cSeq_s)
            runs on ImsComponent {
                // Local variables
                var CSeq v_cSeq_s := p_cSeq_s;

                // Preambule
                f_init_userprofile(c_userProfile_UE1atSUThome);
                f_initSipUrl(c_serviceProfile_EMERGENCY);
                f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF1);
                action("Please register UE");
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync

                // Registration
                f_setHeaders_REGISTER(v_cSeq_s);
                f_SendREGISTER(
                               m_sccas_register(
                                                vc_requestUri, 
                                                vc_callId, 
                                                vc_cSeq, 
                                                vc_from, 
                                                vc_to, 
                                                vc_via_REG, 
                                                vc_contact, 
                                                m_add_Authorization_digest(
                                                                            vc_authorization, 
                                                                            {c_Integrity_protected_no}
                                                                            ), 
                                                PX_IMS_SUT_SCSCF_IPADDR, // TODO To be refined during validation
                                                PX_IMS_SUT_SCSCF_PORT, // TODO To be refined during validation
                                                "600000",
                                                m_sccas_featureCaps( // TS 124 237 Clause C.6 Definition of feature-capability indicator g.3gpp.atcfmgmt-uri
                                                                    {
                                                                        m_fcValue(
                                                                                  "g-3gpp-atcf-mgmt-uri-in-path",
                                                                                  {
                                                                                    {"sip-uri", { tokenOrHost := PX_ACTF_MGMT_URI }}
                                                                                  })
                                                                    }),
                                                m_contentType(c_sdpApplication), // TODO To be refined during validation
                                                m_MBody_SDP(vc_sdp_local) // TODO To be refined during validation
                                ));
                tc_ack.start;
                alt {
                    [] SIPP.receive(mw_sccas_Response_2xxonREGISTER(
                                                                    vc_callId, 
                                                                    vc_cSeq, 
                                                                    vc_from, 
                                                                    vc_to, 
                                                                    vc_via_REG, 
                                                                    vc_contact, 
                                                                    mw_pChargingVector(-, { tokenOrHost := "orig-ioi" }), // TODO To be refined during validation
                                                                    mw_PAssertedID(
                                                                                   mw_PAssertedIDValue(PX_SCCAS_URI)
                                                                                   )
                                                                    )) {
                        tc_ack.stop;
                        log("*** " & __SCOPE__ & ": PASS: 200 OK message was received ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // sync
                    }
                    [] tc_ack.timeout {
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error); // sync 
                    }
                }

                // TODO Deregistration?
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

            } // End of function f_TC_ISC_SCCAS_RSC_REG_04_ueims

            function f_TC_ISC_SCCAS_RSC_REG_04_atcf(in CSeq p_cSeq_s)
            runs on ImsComponent {
                // Local variables
                var CSeq v_cSeq_s := p_cSeq_s;

                // Preambule
                f_init_userprofile(c_userProfile_UE1atSUThome);
                f_initSipUrl(c_serviceProfile_EMERGENCY);
                f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF1);
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync

                // Message
                LibIms_Steps.f_setHeadersMESSAGE(v_cSeq_s, vc_from.addressField.addrSpecUnion, vc_to.addressField.addrSpecUnion);
                f_awaitingMESSAGE(
                                  mw_sccas_MESSAGE_Request(
                                                           -, -, 
                                                           mw_pChargingVector(-, { tokenOrHost := "orig-ioi" }), // TODO To be refined during validation
                                                           -,
                                                           m_contentType("application/vnd.3gpp.SRVCC-info+xml"),  // TODO To be refined during validation
                                                           ? // TODO To be refined during validation
                                  )
                                  );
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); // sync

                // Answer to the MESSAGE
                f_send200OK();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync
            } // End of function f_TC_ISC_SCCAS_RSC_REG_04_atcf

        } // End of group TP_6_3_3_SRVCC_Information_To_ATCF

        group TP_6_3_4_Trigger_SRVCC_To_MSC {

            /**
             *  @desc    Verify that the SCCAS successfully get CS to PS SRVCC information
             *  @param   p_cSeq_s Random CSeq REGISTER number
             */
            function f_TC_ISC_SCCAS_RSC_REG_05_ueims(in CSeq p_cSeq_s)
            runs on ImsComponent {
                // Local variables
                var CSeq v_cSeq_s := p_cSeq_s;
                var Contact v_contact;

                // Preambule
                f_init_userprofile(c_userProfile_UE1atSUThome);
                f_initSipUrl(c_serviceProfile_EMERGENCY);
                f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF1);
                action("Please register UE");
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync

                // Registration
                f_setHeaders_REGISTER(v_cSeq_s);
                v_contact := valueof(vc_contact);
                v_contact.contactBody.contactAddresses[0].contactParams := { // TODO To be refined during validation
                                                                             {
                                                                               "g.3gpp.atcf-mgmt-uri",
                                                                               {tokenOrHost := PX_ACTF_MGMT_URI}
                                                                             },
                                                                             {
                                                                               "g.3gpp.path",
                                                                               {tokenOrHost := PX_ACTF_URI}
                                                                             }
                                                                            };
                f_SendREGISTER(
                               m_sccas_register(
                                                vc_requestUri, 
                                                vc_callId, 
                                                vc_cSeq, 
                                                vc_from, 
                                                vc_to, 
                                                vc_via_REG, 
                                                v_contact, 
                                                m_add_Authorization_digest(
                                                                           vc_authorization, 
                                                                           {c_Integrity_protected_no}
                                                                           ), 
                                                PX_IMS_SUT_SCSCF_IPADDR, // TODO To be refined during validation
                                                PX_IMS_SUT_SCSCF_PORT, // TODO To be refined during validation
                                                "600000",
                                                -/*m_sccas_featureCaps( // TS 124 237 Clause C.6 Definition of feature-capability indicator g.3gpp.atcfmgmt-uri
                                                                    {
                                                                        m_fcValue(
                                                                                  "g-3gpp-atcf-mgmt-uri\",
                                                                                  {
                                                                                    {"sip-uri", { tokenOrHost := PX_ACTF_MGMT_URI }}
                                                                                  })
                                                                    })*/, // TODO To be refined during validation
                                                m_contentType(c_sdpApplication), // TODO To be refined during validation
                                                m_MBody_SDP(vc_sdp_local) // TODO To be refined during validation
                                ));
                tc_ack.start;
                alt {
                    [] SIPP.receive(mw_sccas_Response_2xxonREGISTER(vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact)) {
                        tc_ack.stop;
                        log("*** " & __SCOPE__ & ": PASS: 200 OK message was received ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // sync
                    }
                    [] tc_ack.timeout {
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error); // sync 
                    }
                }

                // TODO Deregistration?
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

            } // End of function f_TC_ISC_SCCAS_RSC_REG_05_ueims

            function f_TC_ISC_SCCAS_RSC_REG_05_msc(in CSeq p_cSeq_s)
            runs on ImsComponent {

                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync

                // Registration

                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); // sync

                // deregistration
                
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

            } // end function f_TC_ISC_SCCAS_RSC_REG_05_msc

        } // End of group TP_6_3_4_Trigger_SRVCC_To_MSC

        group TP_6_3_5_Providing_SRVCC_To_MSC {

            /**
             *  @desc    Verify that the SCCAS successfully provide CS to PS SRVCC information
             *  @param   p_cSeq_s Random CSeq REGISTER number
             */
            function f_TC_ISC_SCCAS_RSC_REG_06_ueims(in CSeq p_cSeq_s)
            runs on ImsComponent {
                // Local variables
                var CSeq v_cSeq_s := p_cSeq_s;
                var Contact v_contact;

                // Preambule
                f_init_userprofile(c_userProfile_UE1atSUThome);
                f_initSipUrl(c_serviceProfile_EMERGENCY);
                f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF1);
                action("Please register UE");
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync

                // Registration
                f_setHeaders_REGISTER(v_cSeq_s);
                v_contact := valueof(vc_contact);
                v_contact.contactBody.contactAddresses[0].contactParams := { // TODO To be refined during validation
                                                                             {
                                                                               "g.3gpp.icsi-ref",
                                                                               {tokenOrHost := PX_ICSI_URI}
                                                                             }
                                                                            };
                f_SendREGISTER(
                               m_sccas_register(
                                                vc_requestUri, 
                                                vc_callId, 
                                                vc_cSeq, 
                                                vc_from, 
                                                vc_to, 
                                                vc_via_REG, 
                                                v_contact, 
                                                m_add_Authorization_digest(
                                                                            vc_authorization, 
                                                                            {c_Integrity_protected_no}
                                                                            ), 
                                                PX_IMS_SUT_SCSCF_IPADDR, // TODO To be refined during validation
                                                PX_IMS_SUT_SCSCF_PORT, // TODO To be refined during validation
                                                "600000",
                                                -/*m_sccas_featureCaps( // TS 124 237 Clause C.6 Definition of feature-capability indicator g.3gpp.atcfmgmt-uri
                                                                    {
                                                                        m_fcValue(
                                                                                  "g-3gpp-atcf-mgmt-uri-in-path",
                                                                                  {
                                                                                    {"sip-uri", { tokenOrHost := PX_ACTF_MGMT_URI }}
                                                                                  })
                                                                    })*/, // TODO To be refined during validation
                                                m_contentType(c_sdpApplication), // TODO To be refined during validation
                                                m_MBody_SDP(vc_sdp_local) // TODO To be refined during validation
                                ));
                tc_ack.start;
                alt {
                    [] SIPP.receive(mw_sccas_Response_2xxonREGISTER(
                                                                    vc_callId, 
                                                                    vc_cSeq, 
                                                                    vc_from, 
                                                                    vc_to, 
                                                                    vc_via_REG, 
                                                                    vc_contact, 
                                                                    mw_pChargingVector(-, { tokenOrHost := "orig-ioi" }), // TODO To be refined during validation
                                                                    mw_PAssertedID(
                                                                                   mw_PAssertedIDValue(PX_SCCAS_URI)
                                                                                   ), // TODO To be refined during validation
                                                                    mw_acceptContact(
                                                                                     { // TODO To be refined during validation
                                                                                        {
                                                                                        "g.3gpp.path-media",
                                                                                        {tokenOrHost := PX_ICSI_URI}
                                                                                        }
                                                                                     }
                                                                                     )
                                                                    )) {
                        tc_ack.stop;
                        log("*** " & __SCOPE__ & ": PASS: 200 OK message was received ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // sync
                    }
                    [] tc_ack.timeout {
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error); // sync 
                    }
                }

                // TODO Deregistration?
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

            } // End of function f_TC_ISC_SCCAS_RSC_REG_06_ueims

            function f_TC_ISC_SCCAS_RSC_REG_06_msc(in CSeq p_cSeq_s)
            runs on ImsComponent {
                // Local variables
                var CSeq v_cSeq_s := p_cSeq_s;

                // Preambule
                f_init_userprofile(c_userProfile_UE1atSUThome);
                f_initSipUrl(c_serviceProfile_EMERGENCY);
                f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF1);
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync

                // Message
                LibIms_Steps.f_setHeadersMESSAGE(v_cSeq_s, vc_from.addressField.addrSpecUnion, vc_to.addressField.addrSpecUnion);
                f_awaitingMESSAGE(
                                  mw_sccas_MESSAGE_Request(
                                                           -, -, 
                                                           mw_pChargingVector(-, { tokenOrHost := "orig-ioi" }), // TODO To be refined during validation
                                                           -,
                                                           m_contentType("application/vnd.3gpp.SRVCC-info+xml"),  // TODO To be refined during validation
                                                           ? // TODO To be refined during validation
                                  )
                                  );
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); // sync

                // Answer to the MESSAGE
                f_send200OK();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync
            } // end function f_TC_ISC_SCCAS_RSC_REG_06_msc

        } // End of group TP_6_3_5_Providing_SRVCC_To_MSC

    } // End of group Group_6_3
     
    group Group_6A_4 {

        group TP_6A_4_2_SIP_INVITE_request {

            /**
             *  @desc    Verify that the SCCAS send INVITE for anchored user populated with FeatureCaps header
             *  @param   p_cSeq_s Random CSeq REGISTER number
             */
            function f_TC_ISC_SCCAS_GEN_INV_01(in CSeq p_cSeq_s)
            runs on ImsComponent {
                // Local variables
                var CSeq v_cSeq_s := p_cSeq_s;

                // Preambule
                f_init_userprofile(c_userProfile_UE1atSUThome);
                f_initSipUrl(c_serviceProfile_EMERGENCY);
                f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF1);
                // Registration
                f_sendRegistrationAndAwait200Ok(
                                                v_cSeq_s,
                                                m_sccas_register(
                                                                vc_requestUri, 
                                                                vc_callId, 
                                                                vc_cSeq, 
                                                                vc_from, 
                                                                vc_to, 
                                                                vc_via_REG, 
                                                                vc_contact, 
                                                                m_add_Authorization_digest(
                                                                                            vc_authorization, 
                                                                                            {c_Integrity_protected_no}
                                                                                            ), 
                                                                PX_IMS_SUT_SCSCF_IPADDR, // TODO To be refined during validation
                                                                PX_IMS_SUT_SCSCF_PORT, // TODO To be refined during validation
                                                                "600000",
                                                                -,
                                                                m_contentType(c_sdpApplication), // TODO To be refined during validation
                                                                m_MBody_SDP(vc_sdp_local) // TODO To be refined during validation
                                                ), 
                                                mw_sccas_Response_2xxonREGISTER(vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact)
                                                );
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync

                // Registration
                f_IncCSeq(v_cSeq_s); LibIms_Steps.f_setHeadersINVITE(v_cSeq_s, f_initSipUrl(c_serviceProfile_EMERGENCY), f_initSipUrl(c_userProfile_UE1atSUThome));
                f_SendINVITE(
                             m_sccas_invite(
                                            vc_requestUri,
                                            vc_callId, 
                                            p_cSeq_s, 
                                            vc_from, vc_to, vc_via_REG, 
                                            vc_contact,
                                            -, -, -,
                                            m_MBody_SDP(vc_sdp_local)
                                            ));
                tc_ack.start;
                alt {
                    [] SIPP.receive(mw_sccas_Response_2xxonINVITE(vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact)) {
                        tc_ack.stop;
                        log("*** " & __SCOPE__ & ": PASS: 200 OK message was received ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // sync
                    }
                    [] tc_ack.timeout {
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error); // sync 
                    }
                }

                // TODO Deregistration?
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

            } // End of function f_TC_ISC_SCCAS_GEN_INV_01

        }  // End of group TP_6A_4_2_SIP_INVITE_request

    } // End of group Group_6A_4
     
    group Group_7_3 {
    } // End of group Group_7_3
     
    group Group_8_3 {
    } // End of group Group_8_3
     
    group Group_9_3 {
        
        function f_TC_IISC_SCCAS_CPT_INV_01_ueims(in CSeq p_cSeq_s)
        runs on ImsComponent {
                
            // TODO: set correct service profiles
            LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, f_initSipUrl(c_serviceProfile_EMERGENCY), f_initSipUrl(c_userProfile_UE1atSUThome));
            f_SendINVITE(m_sccas_invite(
                    vc_requestUri,
                    vc_callId,
                    vc_cSeq,
                    vc_from,
                    vc_to,
                    vc_via_REG,
                    vc_contact,
                    omit, // template(omit) Require p_require := omit,
                    vc_route,
                    m_supported_replaces, //template(omit) Supported p_supported := omit,
                    omit //template(value) MessageBody p_mb
                )
            
            );
            f_awaitingResponse(mw_Response_Base(c_statusLine200, vc_callIdReg, p_cSeq_s));
            
            
            }
        
Steffen Ludtke's avatar
Steffen Ludtke committed
    } // End of group Group_9_3
     
    group Group_10_3 {
    } // End of group Group_10_3
     
    group Group_11_3 {

            /**
             *  @desc    Verify that the SCC AS successfully processes an INVITE that includes an active speech media component using CS bearer.
             *  @param   p_cSeq_s Random CSeq REGISTER number
             */
            function f_TC_ISC_SCCAS_CON_RIN_01(in CSeq p_cSeq_s)
            runs on ImsComponent {
                // Local variables
                var CSeq v_cSeq_s := p_cSeq_s;

                // Preambule
                f_init_userprofile(c_userProfile_UE1atSUThome);
                f_initSipUrl(c_serviceProfile_EMERGENCY);
                f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF1);
                // Registration
                f_sendRegistrationAndAwait200Ok(
                                                v_cSeq_s,
                                                m_sccas_register(
                                                                vc_requestUri, 
                                                                vc_callId, 
                                                                vc_cSeq, 
                                                                vc_from, 
                                                                vc_to, 
                                                                vc_via_REG, 
                                                                vc_contact, 
                                                                m_add_Authorization_digest(
                                                                                            vc_authorization, 
                                                                                            {c_Integrity_protected_no}
                                                                                            ), 
                                                                PX_IMS_SUT_SCSCF_IPADDR, // TODO To be refined during validation
                                                                PX_IMS_SUT_SCSCF_PORT, // TODO To be refined during validation
                                                                "600000",
                                                                -,
                                                                m_contentType(c_sdpApplication), // TODO To be refined during validation
                                                                m_MBody_SDP(vc_sdp_local) // TODO To be refined during validation
                                                ), 
                                                mw_sccas_Response_2xxonREGISTER(vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact)
                                                );
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync

                // Registration
                f_IncCSeq(v_cSeq_s); LibIms_Steps.f_setHeadersINVITE(v_cSeq_s, f_initSipUrl(c_serviceProfile_EMERGENCY), f_initSipUrl(c_userProfile_UE1atSUThome));
                f_SendINVITE(
                             m_sccas_invite(   // TODO request active speech media component using CS bearer
                                            vc_requestUri,
                                            vc_callId, 
                                            p_cSeq_s, 
                                            vc_from, vc_to, vc_via_REG, 
                                            vc_contact,
                                            -, -, -,
                                            m_MBody_SDP(vc_sdp_local)
                                            ));
                tc_ack.start;
                alt {
                    [] SIPP.receive(mw_INVITE_Request(?,vc_requestUri)) {
                        tc_ack.stop;
                        log("*** " & __SCOPE__ & ": PASS: forwarded INVITE message was received ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // sync
                    }
                    [] tc_ack.timeout {
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error); // sync 
                    }
                }

                // TODO Deregistration?
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

            } // End of function f_TC_ISC_SCCAS_CON_RIN_01        

            /**
             *  @desc    Verify that the SCC AS successfully processes an INVITE due to two STIs on the Target Access Leg.
             *  @param   p_cSeq_s Random CSeq REGISTER number
             */
            function f_TC_ISC_SCCAS_CON_RIN_02(in CSeq p_cSeq_s)
            runs on ImsComponent {
                // Local variables
                var CSeq v_cSeq_s := p_cSeq_s;

                // Preambule
                f_init_userprofile(c_userProfile_UE1atSUThome);
                f_initSipUrl(c_serviceProfile_EMERGENCY);
                f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF1);
                // Registration
                f_sendRegistrationAndAwait200Ok(
                                                v_cSeq_s,
                                                m_sccas_register(
                                                                vc_requestUri, 
                                                                vc_callId, 
                                                                vc_cSeq, 
                                                                vc_from, 
                                                                vc_to, 
                                                                vc_via_REG, 
                                                                vc_contact, 
                                                                m_add_Authorization_digest(
                                                                                            vc_authorization, 
                                                                                            {c_Integrity_protected_no}
                                                                                            ), 
                                                                PX_IMS_SUT_SCSCF_IPADDR, // TODO To be refined during validation
                                                                PX_IMS_SUT_SCSCF_PORT, // TODO To be refined during validation
                                                                "600000",
                                                                -,
                                                                m_contentType(c_sdpApplication), // TODO To be refined during validation
                                                                m_MBody_SDP(vc_sdp_local) // TODO To be refined during validation
                                                ), 
                                                mw_sccas_Response_2xxonREGISTER(vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact)
                                                );
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync

                // Registration
                f_IncCSeq(v_cSeq_s); LibIms_Steps.f_setHeadersINVITE(v_cSeq_s, f_initSipUrl(c_serviceProfile_EMERGENCY), f_initSipUrl(c_userProfile_UE1atSUThome));
                f_SendINVITE(
                             m_sccas_invite(   // TODO  request CS -> PS
                                            vc_requestUri,
                                            vc_callId, 
                                            p_cSeq_s, 
                                            vc_from, vc_to, vc_via_REG, 
                                            vc_contact,
                                            -, -, -,
                                            m_MBody_SDP(vc_sdp_local)
                                            ));
                tc_ack.start;
                alt {
                    [] SIPP.receive(mw_INVITE_Request(?,vc_requestUri)) {
                        tc_ack.stop;
                        log("*** " & __SCOPE__ & ": PASS: forwarded INVITE message was received ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // sync
                    }
                    [] tc_ack.timeout {
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error); // sync 
                    }
                }

                // TODO Deregistration?
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

            } // End of function f_TC_ISC_SCCAS_CON_RIN_02  

            /**
             *  @desc    Verify that the SCC AS rejects an INVITE due missing ability to associate it to an ongoing or different SIP dialog.
             *  @param   p_cSeq_s Random CSeq REGISTER number
             */
            function f_TC_ISC_SCCAS_CON_RIN_03(in CSeq p_cSeq_s)
            runs on ImsComponent {
                // Local variables
                var CSeq v_cSeq_s := p_cSeq_s;

                // Preambule
                f_init_userprofile(c_userProfile_UE1atSUThome);
                f_initSipUrl(c_serviceProfile_EMERGENCY);
                f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF1);
                // Registration
                f_sendRegistrationAndAwait200Ok(
                                                v_cSeq_s,
                                                m_sccas_register(
                                                                vc_requestUri, 
                                                                vc_callId, 
                                                                vc_cSeq, 
                                                                vc_from, 
                                                                vc_to, 
                                                                vc_via_REG, 
                                                                vc_contact, 
                                                                m_add_Authorization_digest(
                                                                                            vc_authorization, 
                                                                                            {c_Integrity_protected_no}
                                                                                            ), 
                                                                PX_IMS_SUT_SCSCF_IPADDR, // TODO To be refined during validation
                                                                PX_IMS_SUT_SCSCF_PORT, // TODO To be refined during validation
                                                                "600000",
                                                                -,
                                                                m_contentType(c_sdpApplication), // TODO To be refined during validation
                                                                m_MBody_SDP(vc_sdp_local) // TODO To be refined during validation
                                                ), 
                                                mw_sccas_Response_2xxonREGISTER(vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact)
                                                );
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync

                // Registration
                f_IncCSeq(v_cSeq_s); LibIms_Steps.f_setHeadersINVITE(v_cSeq_s, f_initSipUrl(c_serviceProfile_EMERGENCY), f_initSipUrl(c_userProfile_UE1atSUThome));
                f_SendINVITE(
                             m_sccas_invite(
                                            vc_requestUri,
                                            vc_callId, 
                                            p_cSeq_s, 
                                            vc_from, vc_to, vc_via_REG, 
                                            vc_contact,
                                            -, -, -,
                                            m_MBody_SDP(vc_sdp_local)
                                            ));
                tc_ack.start;
                alt {
                    [] SIPP.receive(mw_Response_Base(c_statusLine480)) {
                        tc_ack.stop;
                        log("*** " & __SCOPE__ & ": PASS: 480 OK message was received ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // sync
                    }
                    [] tc_ack.timeout {
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error); // sync 
                    }
                }

                // TODO Deregistration?
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

            } // End of function f_TC_ISC_SCCAS_CON_RIN_03

        
Steffen Ludtke's avatar
Steffen Ludtke committed
    } // End of group Group_11_3
     
    group Group_12_3 {
        
        
            /**
             *  @desc    Verify that SCC AS correctly recognizes and initiated for PS to CS access transfer for terminating call in pre-alerting phase using PS to CS SRVCC procedure.
             *  @param   p_cSeq_s Random CSeq REGISTER number
             */
            function f_TC_ISC_SCCAS_PCT_INV_06(in CSeq p_cSeq_s)
            runs on ImsComponent {
                // Local variables
                var CSeq v_cSeq_s := p_cSeq_s;

                // Preambule
                f_init_userprofile(c_userProfile_UE1atSUThome);
                f_initSipUrl(c_serviceProfile_EMERGENCY);
                f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF1);
                // Registration
                f_sendRegistrationAndAwait200Ok(
                                                v_cSeq_s,
                                                m_sccas_register(
                                                                vc_requestUri, 
                                                                vc_callId, 
                                                                vc_cSeq, 
                                                                vc_from, 
                                                                vc_to, 
                                                                vc_via_REG, 
                                                                vc_contact, 
                                                                m_add_Authorization_digest(
                                                                                            vc_authorization, 
                                                                                            {c_Integrity_protected_no}
                                                                                            ), 
                                                                PX_IMS_SUT_SCSCF_IPADDR, // TODO To be refined during validation
                                                                PX_IMS_SUT_SCSCF_PORT, // TODO To be refined during validation
                                                                "600000",
                                                                -,
                                                                m_contentType(c_sdpApplication), // TODO To be refined during validation
                                                                m_MBody_SDP(vc_sdp_local) // TODO To be refined during validation
                                                ), 
                                                mw_sccas_Response_2xxonREGISTER(vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact)
                                                );
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync

                // Registration
                f_IncCSeq(v_cSeq_s); LibIms_Steps.f_setHeadersINVITE(v_cSeq_s, f_initSipUrl(c_serviceProfile_EMERGENCY), f_initSipUrl(c_userProfile_UE1atSUThome));
                f_SendINVITE(
                             m_sccas_invite(
                                            vc_requestUri,
                                            vc_callId, 
                                            p_cSeq_s, 
                                            vc_from, vc_to, vc_via_REG, 
                                            vc_contact, // TODO g3gppps2csSrvccTermPreAlerting
                                            -, -, -,
                                            m_MBody_SDP(vc_sdp_local)
                                            ));
                tc_ack.start;
                alt {
                    [] SIPP.receive(mw_Response_Base(c_statusLine183)) {
                        tc_ack.stop;
                        log("*** " & __SCOPE__ & ": PASS: 183 OK message was received ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // sync
                    }
                    [] tc_ack.timeout {
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error); // sync 
                    }
                }

                // TODO Deregistration?
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

            } // End of function f_TC_ISC_SCCAS_PCT_INV_06        

            /**
             *  @desc    Verify that SCC AS correctly recognizes and initiated for PS to CS access transfer for originating call in pre-alerting phase using PS to CS SRVCC procedure.
             *  @param   p_cSeq_s Random CSeq REGISTER number
             */
            function f_TC_ISC_SCCAS_PCT_INV_02(in CSeq p_cSeq_s)
            runs on ImsComponent {
                // Local variables
                var CSeq v_cSeq_s := p_cSeq_s;

                // Preambule
                f_init_userprofile(c_userProfile_UE1atSUThome);
                f_initSipUrl(c_serviceProfile_EMERGENCY);
                f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF1);
                // Registration
                f_sendRegistrationAndAwait200Ok(