RNC Node Level Regression test of Robustness Suite

NIKLAS RYGART

Masters’ Degree Project Stockholm, Sweden June 2011

XR-EE-KT 2011:003

Royal Institute of Technology
Master Thesis Report

RNC Node Level Regression test of Robustness Suite

Author: Niklas Rygart

Supervisors: Johan Lundberg Tobias Oechtering

June 2011

Abstract
The main objective of this master thesis is to reconstruct randomized rendered scenarios leading to failure in the 3G system. The incitement is the ability to easily rerun the scenario triggering a failure, take additional traces to isolate the root cause and verify corrections. This is achieved by utilizing CPPemu (Cello Packet Platform) which emulates a complete 3G system, consisting of the RNC (Radio Network Controller), CN (Core Network), RBS (Radio Base Station), UE (User Equipment), where the three latter are simulated by 3Gsim. A great variety of errors were discovered during the thesis in the simulated environment. This affected the ability to run traffic unimpededly and thus the quest of reconstructing the randomized rendered scenario. One of the major problems is that 3Gsim generates incorrect mobility events when run with random mobility. Another problem is that the time between the executing event are very tight, which requires an unreasonable high precision of the timing in the environment. Approximately ten percent of the scenarios were successfully reconstructed. Although the success rate of the test runs were widely spread. In order to tackle the problems a lot of timing parameters could be tried out, or the more realistic solution is to modify the behavior of the environment itself to prevent unacceptable timings in the random mobility.

1

. . . . . . . . . 3. . . . . . .2 Traffic behavior . . . . . . . . . . . . . . . . . .1 Test suite . . 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 Mobility behavior . . . . . . . . . . . . . . . . . . 2.1 Architecture . . . . . . . . . . . . . . . . . .2 Scope . . . . .3 RAN interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4 WCDMA RAN basic 2. . 2 System overview 2. . . . . .5 Mobility file . . . . . 2. . . . . 3. . . .4 Events . . . . . . 3. . . . . . . . . . . . . . . . . . 3. . . . . . . . . . . . . . . . . . . . . . .1 Background . features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 Common test . 3 Model 3. . . . . . . . . . . . . . . . . . . . . 5 6 6 7 7 7 8 9 10 10 11 12 12 13 14 14 15 15 15 17 23 24 . .6 Cells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3. . . . . . . 3. . . . . . . . . .2 RNC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2. . . . . . . . . . . . . . . . . . . . . . . . . . 2. . . . . . . . .5 3Gsim . . . . . . . . . .7 Configuration & fine tuning 4 Results 5 Conclusions 6 Discussion . . . . . . . . 2 . . . 2. . . .Contents 1 Introduction 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6 Erlang . . . . . . . . . .

List of Abbreviations 3G 3GPP 3Gsim ATM BD CCS CLI CN CPPemu CT DCS EUL/HS FACH GPB GSM HHO HSPA HTML IFLS IP ISDN Iu Iub Iur MB Mu Mub Mun Mur 3rd generation mobile telecommunications 3rd Generation Partnership Project 3G simulator Asynchronous Transfer Mode Broadcast Domain Common Channel Command Line Interface Core Network Cello Packet Platform emulator Common Test Dedicated Channel Enhanced UpLink/High Speed Forward Link Access Channel General purpose Processor Board Global System for Mobile Communications Hard HandOver High Speed Packet Access Hyper Text Markup Language Inter Frequency Load Sharing Internet Protocol Integrated Services Digital Network UMTS interface between UTRAN and CN UMTS interface between RNC and RBS UMTS interface between RNCs Mobility Behavior Management Interface Management Interface RANOS and RBS Management Interface RANOS and CN Management Interface RANOS and RNC 3 .

Mut OSS-RC OTP PDR PSint RAB RACH RANOS RAN RAT RBS RNC RNH RXI SAI SC SNR SPB TB UEH UE UMTS URA UTRAN Uu WCDMA tc init tc init end tc rob tc rob vrf Management Interface RANOS and RXI Operations Support System .Radio & Core Open Telecom Platform Packet Data Router Packet Switched interactive Radio Access Bearer Reverse Link Access Channel Radio Access Network Operation Support Radio Access Network Radio Access Technology Radio Base Station Radio Network Controller Radio Network Handler Radio access network aggregator Service Area Identifier Start Cell Signal to Noise Ratio Special purpose Processor Board Traffic Behavior User Equipment Handler User Equipment Universal Mobile Telecommunications System UTRAN Registration Area UMTS Terrestrial RAN The interface between UTRAN and UE Wideband Code Division Multiple Access Initiating test case End initiating test case Robustness test case Verifying robustness test case 4 .

In other words the traditional telecommunication services and the evolving internet services are both fully integrated in the 3G system. The third generation mobile communication system (3G) supports both CS (circuit-switched) and PS (packet-switched) traffic in contrary to prior systems that tend to use separate subsystems for the different traffic types. DSC and PDR subsystems. The user plane consists of the CCS. The expansion in terms of variety of bit rates and bandwidths are also crucial features of the WCDMA (Wideband Code Division Multiple Access) network. The other major control plane subsystem of the RNC is RNH (Radio Network Handler) which manages the radio network and creates the transport channels in between the RNCs and the CN. UEH is a subsystem of the control plane in the RNC that manages the UE. Figure 1: Interoperability of 3G WCDMA with 2G GSM systems [2] In order to retain a stable continuous mobile service both 2G GSM (Global 5 . The PDR (Packet Data Router) routes the traffic towards the CN.1 Introduction This master thesis was carried out at Ericsson in Kista at the UEH (User Equipment Handler) department within RNC design. CCS controls the Common Channel and DCS the Dedicated Channels.

That involves alternating sequences of calling. To ensure the new versions does not have negative impact on performance or existing features. mobility in the RAN network and simulated interruptions such as operation and maintenance. which is a framework for automated testing of arbitrary target nodes. see Figure 1. These software updates also includes new features. More details can be found in [2]. The actual testing is performed with Common test. Erlang OTP comprises is a development environment for building distributed real-time high availability systems.2 Scope • Learn how to write and execute RNC node level test cases in the Erlang test framework • Design a random test scenario using three UEs • Find out how to record the sequence of actions done for each individual UE • Find out how to be able to rerun the exact same sequence of actions in order to be able to recreate faults 6 . This master thesis investigates a way of accomplishing such an implementation. Therefore random traffic is used to generate the behavior of the UEs. The RNC node is one of the NE (Network Elements) in the WCDMA RAN (Radio Access Network). 1. The exception cases in each test scenario that can be evaluated exist in such amount that is unfeasible to cover them all with fixed test scenarios. it must be possible to reconstruct the scenario in order to trace the root of the problem. 1. The test cases are written in Erlang OTP (Open Telecom Platform) based test framework. To enable collaboration in between the two generations of mobile telecommunications. data sessions and idling. backward compatibility is a key feature.1 Background Due to requirements of higher speed data transfer in the 3G system.System for Mobile communications) and 3G WCDMA work inter operatively. regression testing comes in handy. Regardless of what fault that is triggered. new versions of the software controlling the RNC is needed.

such as balances for prepaid cards and routing of the calls. • Support for UE positioning service. For example if the UE initiates a call. • Control the RAB (Radio Access Bearer) state. The UE involves any type of mobile equipment. see Figure 2.2 RNC The RNC works like a coordinator for the different NE in the RAN. • Decide when to execute a handover process . All UE contains a USIM (UMTS Subscriber Identity Module) that contains information from the subscriber including authentication and encryption keys. while the PsInt (Packet Switched Interactive) RAB state is used when web browsing. the Speech RAB state is used.2 2. [6] 2. 7 . such as a laptop or a cell phone. which ensures adequate present mode of the UEs. frequency or system (e g 3G to 2G).1 System overview Architecture Figure 2: RAN system architecture overview [2] The WCDMA RAN for UMTS (Universal Mobile Telecommunications System) is the link between the CN and the UE.to another cell. [4] The following is the main functionality of the RNC: • Manage the radio resources and monitor and handle the UE mobility. The CN handles mobile subscriber related inquiries.

The Iur is used by the RNC for internal communication in between multiple RNCs or RNS (Radio Network Subsystem). The Mun (Management Interface RANOS and CN) is provided by the CN and within the OSS-RC (Operations Support System . The air interface Uu is the connection between the UE and the RBS. The Mub (Management Interface RANOS and RBS) is provided by the RBS. see Figure 4. Both these internal interfaces can be used either with the ATM (Asynchronous Transfer Mode) technology or by IP (Internet Protocol).the Mu interfaces. The Iu interface handles the communication between the RNC and the three different domains of the CN .Radio & Core).3 RAN interfaces Figure 3: The Iu interface & the connected CN domains [2] There are a bunch of different interfaces for the RAN to communicate with external devices. The OSS-RC collects data from the RNC and RBS and makes it available to the OSS-RC applications.2. The internal interfaces in the RAN for traffic and control signaling is the Iur and Iub. while the Iub is used for the communication between the RNC and the RBS. The Mut (Management Interface RANOS and RXI) is provided by the RXI (Radio access network aggregator). 8 . BD (Broadcast Domain). PS. The RAN also has some management interfaces that are IP-based . which is a type of multiplexer between the RNC and RBS that handles different transport solutions.CS. see Figure 3. Mur (Management Interface RANOS (Radio Access Network Operation Support) and RNC) is the management interface provided by the RNC.

It also coordinates the ciphering keys between the CNs. All actions is set with different prior- 9 . When using data packet services. The feature can for instance order a channel switch to release some resources or in worst case deny new calls or even kick out some sessions. The other manages the RABs and the connection between the UE and the rest of the RAN . even in a congested RAN by rejecting regular calls. could take place depending on the coverage and throughput as well. For heavy usage a dedicated channel is assigned. Therefore there are different RAB states depending on the activity. the bandwidth demand tend to vary in time.the User Plane protocols. while a switch to a common channel is performed upon dropped usage.There are two types of protocol structures for the interfaces (internal & external). Upon overload the congestion control feature is utilized. This feature that optimizes the available resources is called channel switching. One implementing the RAB services .4 WCDMA RAN basic features Maybe one of the most important feature is the emergency call feature. The currently used Kasumi algorithm (128 bits) was conventioned already in 3GPP ’99 (3rd Generation Partnership Project).the Control Plane protocols. It is possible to setup an emergency call. [2] Figure 4: WCDMA Radio Access Network [11] 2. In addition the switch. To be able to initiate a call admission control is necessary. to a higher or lower bit rate channel. This also includes incoming handover processes. The ciphering mode control is a feature handled by the CN to ensure secure data transfers between the RNC and the UE.

computer telephony and instant messaging. In other words the test framework is used to manoeuvre 3Gsim (and the CPPemu). It is based on the SAI (Service Area Identifier). The complete 3Gsim manual is available in [10]. In this thesis the commands are executed through a telnet connection which is set up via Erlang.5 3Gsim Figure 5: Testframework overview 3Gsim is a very complex environment offering high-level commands controlling many simulated objects in one command.ities depending on the grievousness of the congestion. [5] 2. A positioning service is available through the Iu interface. It is built on CPP (Cello Packet Platform) and runs on a number of GPB (General purpose Processor Board) and SPB (Special Purpose Processor Board). Beyond the telecoms it is also used within banking. Another extensive feature for WCDMA to work is the power control. 2. which the test cases are written in. The commands can either be entered strait into the CLI (Command Line Interface) or executed from a command file. compared to UEs at the cell border. A four day course was held (and attended) in the middle of March (8-11). Since the bandwidth is shared it is of great importance that all UE keep an appropriate power level on basis of the corresponding position. Parts of the course 10 . It was developed to build massively scalable soft real-time systems with requirements of high availability. see Figure 5.6 Erlang Erlang is a functional concurrent programming language. For example less power is required to maintain the desired SNR (Signal to Noise Ratio) for UEs close to the RBS.

11 . Erlang has a telecommunication specific platform which is called Erlang OTP with a set of Erlang libraries and design principles that for example enables debugging and inter-language application interface.7 Common test Common test is a portable test server for black-box testing and can also be used for white-box testing in OTP applications and Erlang programs. Reference manual is available in [8]. A two day course was held (and attended) in April (6-7). It provides the possibility to run test suites automatically on local and remote targets in a large scale.material are available in reference [3]. Reference manual is available in [7]. The results are presented in a HTML (Hyper Text Markup Language) format. which are utilized in this thesis. 2. Common test has good prerequisites for regression testing.

After which the events performed 12 . each specified with its own random mobility and traffic behavior from tc init. The second. Whereupon the actual performed events are traced.1 Test suite The test suite consists of four main parts: • tc init • tc rob • tc rob vrf • tc init end Where the first one sets up (initiates) the described cell configuration. The RAN consists of two RBS on two different frequency bands. 3.3 Model Figure 6: Cell configuration (and capabilities) of the Scenario The scenario consists of three active UEs and one passive UE. The cells have various capabilities (the older standard R99 and the newer HSPA). One of them calls the fourth passive UE. The three UEs have different traffic and mobility behaviors. tc rob (robustness test case) activates three UEs. The third. tc rob vrf (verifying robustness test case) starts three UEs with the custom mobility events recorded from tc rob. each with a total of six cells divided into two cell groups of three cells. defines the traffic behaviors and the mobility behaviors. see Figure 6.

– 4s cch • 3xPsIntEUL HS sequentially alternating between the five RAB states: – 3s int eul hs PSint with EUL/HS (Enhanced UpLink/High Speed) capabilities. Each traffic behavior is configured to loop when the duration (in seconds) of its last traffic activity is elapsed. – 3s 2xint eul hs 2 parallel PSint connections – 3s 3xint eul hs 3 parallel PSint connections – 3s 2xint eul hs – 3s int eul hs • sp int sequentially alternating between the seven RAB states: – 2s int eul hs – 2s speech 12 2 int eul hs Speech CS using AMR (Adaptive MultiRate audio codec) 12. 3.could be verified with the input events. The last. The three traffic behaviors used are: • psint fach ura fach sequentially alternating between the four RAB states: – 4s int 64 64 PSint (Packet Switched interactive) 64/64 kb/s (down/up) – 4s cch CCH (Control CHannel) Where the PSint is set up – 4s int ura ura URA (UTRAN (UMTS Terrestrial RAN) Registration Area) Disconnects Radio link but but keeps CN resources.2 Traffic behavior The traffic behavior defines which services the UEs will use.2 kb/s + PSint with EUL/HS capabilities. tc init end revokes the setup in tc init. – 2s speech 12 2 int 0 0 Speech + FACH (Forward Link Access Channel) 0/0 kb/s (down/up) – 2s speech 12 2 2xint eul hs Speech + 2 parallel PSint – 2s speech 12 2 int eul hs – 2s speech 12 2 – 2s speech 12 2 int eul hs A complete list of available traffic behaviors are specified in the 3Gsim manual [10]. to make it possible to run different scenarios afterwards. 13 .

1a + 1b 1d. The three mobility behaviors used are: • random cells 3s – leg change interval 3000 – fach cell reselection interval 3000 – ura cell reselection interval 3000 • random cells 4s – leg change interval 4000 • random cells 5s – leg change interval 5000 Where the three leg change interval specifies the number of milliseconds to wait before randomly change location. Change of best cell 2. Inter frequency events 2a. another frequency better 2d. Intra frequency events 1a. While randomly moving around in the UTRAN the RNC keeps a list of reachable cells and their current signal strengths. sent from the UE. Remove a cell from AS 1c.3. Current frequency bad. Include a new cell to AS (Active Set) 1b. 3. Current quality of frequency bad (below threshold) 14 . A complete list of available mobility behaviors are specified in the 3Gsim manual [10]. intended to be a decision basis for the RNC.4 Events Mobility events are measurement reports. The cells currently in use are called the active set cells. Change of best frequency 2b.3 Mobility behavior The mobility behavior defines the way the UEs moves in the RAN. This is called the monitored set cells. The FACH (Forward Link Access Channel) and URA (UTRAN (UMTS Terrestrial Radio Access Network) Registration Area) reselection parameters are used in combination with traffic behaviors containing CCH RABs to enable mobility of non DCH (Dedicated CHannel). These are the mobility events in use: 1.

Unfortunately there were some issues with the concurrent execution of the commands in 3Gsim. ] (1) where duration is the time in milliseconds to wait after executing the event.4. 3.6 Cells When an UE is created with mobility a start cell is specified. i e 1c.5 Mobility file A mobility file contains events underlying decisions of the UE handling made by the RNC. ”cell”. the string cell consists of two cell IDs. ”event”}. Events where the cell is implied. Current quality of frequency good (above threshold) 3. {”duration”. which led to a solution with behaviors containing intervals that did not match the multiples of the other UEs. UE transmitted power is not enough for coverage (same result as 2d) 6d. Later on a checkpoint upgrade was performed and this did no longer seem to affect the outcome and were consequently changed back to its initial values. UE internal events 6b. the cell string will solely contain a dash ”-”. UE maximum transmittable power reached 3. three and five seconds. Inter RAT (Radio Access Technology) events 3a. the RNC makes a decision whether change of frequency or cell is appropriate. . in the 3Gsim command that creates the UE. Instead of defining a mobility behavior. a mobility file can be specified. three and four seconds respectively for the traffic behavior. If a cell does not have support for HSPA (High Speed Packet Access) and the UE requests a change to DCH the RNC will take the decision to make a HHO (Hard HandOver) to the corresponding cell on the other frequency band within the same location. ”cell”. . [{”duration”. This is the form of the input to the mobility file generator (1).7 Configuration & fine tuning Initially the time interval for the three UEs were equally spaced with two. The interval for the mobility behaviors were set to four. event is one of the events listed in 3. 3. This is utilized in the tc rob vrf test case. 15 . . ”event”}.2f. Depending on which mobility event received from the UE. separated with a dash. Like 2b but for UTRAN (UMTS Terrestrial RAN) 6. e g ”1014-1011”. cell is the ID of the cell. If the event is one of the double events.

The upgrade was necessary to be able to make use of the new functions that the test case required.5 seconds compared to the fixed mobility that started immediately. A possible solution was to stop the UEs one by one (3) to prevent the hanging. because there were no error message generated by the void license key. which triggers a version change in both 3Gsim and the RNC node. (3) A lot of synchronization problems arose as a consequence to a checkpoint upgrade of the network. 3gsim stou − i all (2) This is executed before the end of the simulation. Unfortunately the command caused 3Gsim to hang.. but was not as successful as reckoned. There was a delay in the start of the random mobility of approximately 4. Unfortunately. this did not cure the problems ether. Where the prior shows exceptions in 3Gsim.The 3Gsim command (2) stops all UEs. Therefore a start delay was added to the mobility file to compensate for this. Later on another attempt was applied to fix this issue. This affected the whole test department for a several weeks and caused problems to run traffic at all. In combination with the synchronization problems the license key for the RNC application expired. 16 .. One possible workaround to this was to reset the RBS and redefine them again. The approach was to restart 3Gsim after changing the SPM (Special Purpose Processor Module) allocation for all cells to reside on the same SPB (Special Purpose Processor Board). For example if incorrect RAB states were established or a mobility event could not be performed. This turned out to be harder to specify than just changing the start delay of the mobility events once. Two of these post checks were also added to the reconstructing test case. This approach was tried out. But that did not seem to have the desired effect on the synchronization problems. To facilitate verification of the test case runs two post checks were added to the suite tc rob postcheck tgsim and tc rob postcheck exc err. Sometimes when the emulator was restarted the start time was drifting which required a reconfiguration of the delays that was really time consuming. While the latter shows the if there were any exception errors in the RNC. which contributed to some errors that was quite hard to track. Finally the fault was isolated to the Iub frame synchronization triggered by 3Gsim. 3gsim stou − i 000001 .

In the test case tc rob vrf the scenario was reconstructed by using the mobility file generated in tc rob with some difficulty. The right column tells whether there was a match between the test cases or not. because the measurement report.4 Results The test case tc rob parsed the output of the 3Gsim log and created a mobility file successfully. Even if the delays were configured properly upon every restart. Yet another error was discovered. Another set of configurations with random start cells and 2400. The table shows one test run per line with the amount of executed mobility events in respective test case. Initially the start cells were set manually. because reselection of cells in URA and FACH is just possible with random mobility. One set of configurations with random start cells and 6900. arrived of some reason at the very same moment (millisecond) as the change of frequency was ordered. gave the result presented in Table (1). Since the precision of the execution was not sufficient (below one millisecond). A TR (Trouble Report) has been issued on 3Gsim and until it is solved. gave the result presented in Table (2). 3400 and 4400 milliseconds start delay of the mobility for the three UEs respectively. there were nonexecuting events. Table 3 shows the result of those test runs. a function choosing random start cells for each UE was implemented. mostly because the scenario looked differently for every test run. a test without the delay for the 2b events were run. and cannot be specified in custom mobility. HHO have to be disabled and thus also the inter frequency coverage relations. The results are 17 . This was compensated by subtracting 50 ms from the event after to prevent affection of the remaining events. The FACH and URA reselection intervals in the mobility behavior for the first UE did not work properly. Since the inter frequency coverage relations might have changed the premises of the test. 3Gsim random mobility generates incorrect events in combination with Hard Handover. Sometimes the UEs hanged which resulted in a discontinuation of execution of all remaining mobility events. So the reselection interval for URA and FACH were set to 100 000 ms to prevent change of active cell during URA and FACH. when the cell the event intended to change to was not listed in the monitored set cells. a 50 ms delay was introduced before any 2b events was executed. The gray background indicates that the whole test case was reconstructed successfully. 3Gsim is sending mobility 2d to make a cell the best cell even though it is no longer part of the active set. The hangings were in most cases caused by the mobility event 2b. But in order to reduce affection of the different capabilities of the cells. 9150 and 10250 milliseconds start delay of the mobility for the three UEs respectively. sent by the UE.

) 18 .UE1 3 4 0 7 8 2 2 1 6 0 3 3 7 5 1 5 3 3 6 8 0 2 7 4 1 0 4 rob UE2 5 5 4 5 4 5 4 5 5 5 4 5 4 5 5 6 6 4 4 4 5 5 6 4 4 5 5 UE3 4 4 4 4 4 4 4 5 5 4 4 3 5 4 5 4 4 5 5 5 3 4 4 4 4 4 4 UE1 2 0 0 4 0 2 2 0 1 0 2 1 1 0 1 2 1 2 6 8 0 2 2 2 1 0 4 rob vrf UE2 UE3 3 4 5 4 4 4 3 2 4 4 5 4 4 4 1 2 3 3 2 2 5 4 1 5 4 1 4 4 4 5 5 1 4 4 1 1 2 2 3 3 4 5 4 2 2 5 2 2 4 3 4 4 4 3 rob == rob vrf != 0 UE1 UE2 UE3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 59% 1 1 25% 64% Table 1: Success rate (number of mobility events) for test runs with start delay 6900. 9150 & 10250 ms. (Crashed test runs suppressed.

(Crashed test runs suppressed.UE1 4 9 10 6 7 6 3 8 6 5 9 6 10 rob UE2 15 13 12 12 12 10 10 10 15 12 12 13 11 UE3 12 9 8 9 9 14 10 9 12 11 7 12 9 UE1 2 11 10 3 8 10 2 3 10 3 8 6 6 rob vrf UE2 UE3 15 5 13 5 3 8 5 5 11 9 1 2 10 1 1 12 8 10 8 10 5 2 11 5 1 5 rob == rob vrf != 0 UE1 UE2 UE3 1 1 1 1 1 1 1 1 1 15% 31% 1 31% Table 2: Success rate (number of mobility events) for test runs with start delay 2400. (Crashed test runs suppressed. 3400 & 4400 ms.) UE1 8 7 9 7 7 rob UE2 12 15 11 14 13 UE3 10 9 10 10 10 UE1 8 2 8 2 6 rob vrf UE2 UE3 12 10 3 5 7 10 3 1 1 5 rob == rob vrf != 0 UE1 UE2 UE3 1 1 1 1 20% 20% 40% Table 3: Success rate (number of mobility events) for test runs wihout inter frequency coverage relations.) 19 .

20 .shown in Table 4. Results are shown in Table 5. A suspected fault regarding the reuse of the tc init run in between each test case led to another test run with tc init end included in each test group to reset the network.

(Crashed test runs suppressed.UE1 7 7 9 8 7 5 8 8 6 7 6 3 4 7 8 5 3 10 10 5 8 8 3 10 6 8 10 3 8 6 9 6 7 10 rob UE2 11 14 12 13 10 10 13 9 15 9 12 14 12 12 13 12 12 11 12 14 10 12 13 9 12 14 11 13 12 12 16 12 12 11 UE3 12 14 11 13 11 13 10 11 9 14 11 12 9 10 10 7 12 8 10 10 12 7 9 10 13 10 12 11 11 12 8 12 10 10 UE1 4 4 8 8 6 4 8 8 4 8 2 6 2 4 8 6 2 10 10 7 8 6 2 10 4 8 8 2 6 4 8 4 10 8 rob vrf UE2 UE3 7 5 3 1 3 2 13 2 5 11 10 1 5 10 9 11 7 6 7 2 3 2 14 1 5 6 10 10 7 5 5 5 5 12 11 12 7 10 5 13 7 12 3 11 13 12 1 8 12 12 11 8 9 8 9 5 3 10 1 10 4 11 5 8 5 2 1 6 rob == rob vrf != 0 UE1 UE2 UE3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 26% 1 1 1 44% 26% Table 4: Success rate (number of mobility events) for test runs without 2b delay.) 21 .

) 22 .UE1 10 6 8 10 6 10 5 8 8 9 5 10 9 9 7 8 7 5 3 rob UE2 14 13 11 11 12 12 14 16 13 15 12 14 13 11 15 11 13 12 13 UE3 9 11 10 12 11 9 10 9 10 7 11 10 10 7 12 8 7 10 7 UE1 6 10 8 10 2 10 8 8 8 6 2 10 8 10 6 3 4 2 2 rob vrf UE2 UE3 13 9 13 11 5 10 3 2 6 5 5 9 3 2 3 2 13 10 10 5 8 3 10 11 6 9 13 5 3 5 5 10 3 5 4 7 7 7 rob == rob vrf != 0 UE1 UE2 UE3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 40% 30% 20% Table 5: Success rate (number of mobility events) for test runs with tc init end included. (Crashed test runs suppressed.

Today 3Gsim generates faulty events. But to regenerate a scenario that will trigger roughly the same scenario. because the time to establish or change a RAB state slightly varies. The most frequently events with this behavior is the 1d and 2d events. Although this will require a new revision of the whole 3G simulator. For a realistic scenario 100 ms or at most 50 ms of precision could be achieved. Sometimes this problem arises with a few milliseconds difference. This can be tricky because in a simulated environment there will always be some time difference. 23 .5 Conclusions Due to timing inconsistency an exact scenario is hard to regenerate in this simulated environment. A rule of thumb could be to at most accept a third of the smallest trigger or interval of the traffic/mobility behaviors. Another thing to take into account is what size of the delay to accept to consider it as a successful one. Until then the only decent solution seems to try out a tremendous amount of parameters in 3Gsim and the RNC in hope for a combination that gives a precision sufficient to recreate the scenario. Further with this method we do not know how many tests to be run to get one useful case. Since the timing is different results are varying a lot. is possible under the right circumstances. For the reconstructing test case to be able to rerun the same scenario it has to have a precision of less than one ms. which should not be possible. Another is that the random mobility renders correct events. hopefully triggering the same faults. But that can be solved by making a function that checks if the prior test run had matching initial events. which still makes it very difficult to get exact same sequence. In other words the few times 3Gsim manages to generate the events correctly the custom mobility will be able to reconstruct that scenario and consequently pass that particular test run. One of the faulty behaviors showed when the random mobility executed events at the exact same millisecond. external help for analyzing what the source of the fault is needed. which leads to the infeasibility of the custom mobility to generate the same (faulty) sequence of events. One prerequisite is that the initial mobility event will be executed at the same time for all runs of the tc rob vrf cases. The disadvantage of this method is that it will require a lot of test runs in order to be able to draw some conclusions whether the suite fulfills the criterion. One way to ensure the premises are fulfilled is simply to disregard the test runs where the delay differs between tc rob and tc rob vrf. One strategy is to modify the timing of the random mobility events in order to prevent the executed events to be too tight.

For example it would be possible to discover passed test cases handled in a non optimal way. 24 . Quviq check also comes with the advantage that it is able to test against models of mobility. that is used for automated testing. there is most definitely something that is misconfigurated in the environment. In order to find out if there is a way to solve the environment issues and suppress the time difference between the initial event of tc rob and tc rob vrf expert advice of 3Gsim has to take place. That enables verification of the cell capabilities utilization. could be utilized to run a regression test of the kind performed in this thesis. Due to the varying success when running test cases with identical setup.6 Discussion Further investigation of whether the license based tool QuviQ check [9].

Appendix This master thesis was supervised by • Johan Lundberg at Ericsson • Tobias Oechtering at the Royal Institute of Technology 25 .

2011 [9] QuviQ check http://quviq.References [1] Exjobb RNC Node Regression test suite Johan Lundberg.erlang. 2006 [4] RNC Introduction Flow LZU00000455 Ericsson AB Rev 1A [5] WCDMA RAN Protocols and Procedures LZU 108 5886 R5B Ericsson AB 2006 [6] Ericsson WCDMA System Overview 1055469 Ericsson AB January 22. 2011 [10] 3Gsim User’s Guide 1553-LZT 123 7595 rev BN January 25.org/erldoc April 11. Ericsson AB December 12. 2005 26 .org/doc/apps/common test/ April 11. 2010 [3] Erlang Crash Course Peter Andersson. 2011 [8] Common test http://erlang. 2008 [7] Erlang OTP reference manual http://demo. 2011 [11] WCDMA RAN 2/22105-FGB 101 135 Uen Rev H Ericsson AB April 21.com/ April 11. 2010 [2] WCDMA RAN 137/1551-HSD 101 02 Uen C Ericsson AB December 9. Ericsson AB September.

.

i n i t p e r g r o u p /2 . %%% − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − %%% #2. support / include / rcc support . BASIC INFORMATION %%% − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − %%%=================================================================== %%% F i l e : ueh robustness SUITE . %% S e e e a c h f u n c t i o n below %%========================================== −e x p o r t ( [ a l l / 0 . groups /0 . p a r s e 3 g s i m l o g /2 . support / include / rcc config . end per group /2 . t c r o b v r f /1 . hrl ”). hrl ”). t c r o b p o s t c h e c k t g s i m /1 . %%========================================== %% My i n c l u d e d f i l e s %%========================================== %%========================================== %% My d e f i n e s %%========================================== 28 . %%========================================== −e x p o r t ( [ t c r o b / 1 . %% %% %% %% %% %% %% %% %% mandatory optional optional optional optional mandatory i f mandatory i f optional optional groups are d e f i n e d groups are d e f i n e d %%========================================== %% T e s t c a s e s %% D e f i n e s a l l t e s t c a s e s . t c i n i t e n d /1 . hrl ”). INCLUDE FILES %%% − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − %%========================================== %% Mandatory i n c l u d e f i l e s %%========================================== − i n c l u d e l i b ( ” common test / i n c l u d e / c t − i n c l u d e ( ” / vobs / r n c / u t e U s e r s / r c c / r c c − i n c l u d e ( ” / vobs / r n c / u t e U s e r s / r c c / r c c − i n c l u d e ( ” / vobs / r n c / u t e U s e r s / r c c / r c c . e n d p e r s u i t e /1 . t c i n i t /1 . e r l %%% %%% D e s c r i p t i o n : T e s t S u i t e c o n t a i n i n g randomized r o b u s t n e s s t e s t c a s e %%% m a i n l y w i t h UEH f o c u s %%% %%%=================================================================== −module ( u e h r o b u s t n e s s S U I T E ) . end per testcase /2]). hrl ”). support / include / rcc def .Test suite %%% − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − %%% #0. s u i t e /0 . %%% − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − %%% #3. %% F u n c t i o n s w i t h o u t arguments ( xxx / 0 ) a r e o p t i o n a l . i n i t p e r s u i t e /1 . i n i t p e r t e s t c a s e /2 . t c r o b v r f p o s t c h e c k t g s i m /1 . EXPORT TESTCASES %%% − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − %%========================================== %% T e s t s e r v e r c a l l b a c k s . tc rob vrf postcheck exc err /1]). t c r o b p o s t c h e c k e x c e r r /1 .

SUITE LEVEL DEFINITIONS %%% − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − %%%=========================================================================== %% @spec a l l ( ) %% %% −> GroupsAndTestCases | { s k i p . %% Compile r e q u i r e d modules ok = ?RCC MAKE RCC. %t y p i c a l l y 3 s − d e f i n e (STOU TIMEOUT. %% Adding s u i t e l e v e l d e f i n i t i o n s u i t e ( ) −> [ { t i m e t r a p . %% @end %%%=========================================================================== a l l ( ) −> [ { group .[{ level . s i t e }]} . 0 . %%%=========================================================================== %% @spec i n i t p e r s u i t e ( C o n f i g 0 ) %% %% −> C o n f i g 1 | { s k i p . %t y p i c a l l y 80 − 120 s %% I f u s i n g r e a l o r emu RNC %%% − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − %%% #4. { userdata . c h o o s e ( c t : g e t c o n f i g ( h o s t ) == c t : g e t c o n f i g ( t g s h o s t ) . 1 8 0 0 0 0 ) . Reason . Reason } | { s k i p a n d s a v e . Reason } %% %% where %% GroupsAndTestCases = [ { group . %% </pre > %% @end %%%=========================================================================== i n i t p e r s u i t e ( C o n f i g ) −> %% Enable l o g g i n g o f a l l commands t o CT l o g udda log : p r e t t y p r i n t c t ( true ) . 5 } } . C o n f i g 1 } %% %% where %% %% ConfigX = [ t u p l e ( ) ] %% Reason = term ( ) %% %% @doc %% <pre > %% i n i t p e r s u i t e c o n t a i n s i n i t i a l i z a t i o n s %% t h a t a r e common f o r a l l t e s t c a s e s i n t h e s u i t e . GroupName } | T e s t C a se ] %% GroupName = atom ( ) %% T e s t C a se = atom ( ) %% Reason = term ( ) %% %% @doc %% Return a l i s t i n which o r d e r t h e t e s t c a s e g r o u p s and %% t h e t e s t c a s e s a r e t o be run . t g r p a l l } ] . { s t y l e s h e e t . c s s ” } ] . − d e f i n e (CU TIMEOUT.− d e f i n e (RNC DELAY. %% and t h a t a r e o n l y t o be p e r f o r m e d o n c e . The f o l l o w i n g i s done : %% %% − Open t e l n e t p o r t t o RNC and 3Gsim %% − Open MoShell p o r t t o RNC %% − S t a r t t i m e s e r v e r on CPPemu %% − S t a r t t i m e s e r v e r on CPPemu %% − B u i l d up board l i s t i n RNC MoShell w i t h command BP a l l . 0 ) ) . { hours . 29 . %% Note : i f a t e s t c a s e i s n o t l i s t e d i t wont be e x e c u t e d . 5 0 0 0 ) . ”/home/ e n i k r y g / p u b l i c h t m l / l o g s t y l e s h e e t .

ok . Reason } | { s k i p a n d s a v e . %% − Then a c h e c k i s made t o s e e i f t h e c u r r e n t t e s t c a s e i s a p o s t c h e c k %% t e s t c a s e by c h e c k i n g f o r s t r i n g ” p o s t c h e c k ” i n t h e t e s t c a s e name . %% The f o l l o w i n g i s done : %% %% − A c h e c k i s made t o s e e i f t h e t e s t c a s e name i s ” t c i n i t ” o r %% ” t c i n i t e n d ” . C o n f i g 1 } %% %% where %% %% T e s t C a se = atom ( ) %% ConfigX = [ t u p l e ( ) ] %% Reason = term ( ) %% %% @doc %% <pre > %% T h i s p a r t c o n t a i n s a c t i o n s which must be done b e f o r e e a c h t e s t c a s e . %%%=========================================================================== %% @spec i n i t p e r t e s t c a s e ( TestCase . t h e f o l l o w i n g a c t i o n s a r e done : %% − A s e a r c h f o r t h e whole t e s t c a s e name i s done i n t h e p o s t c h e c k c o n t r o l %% file . %%%=========================================================================== %% @spec e n d p e r s u i t e ( C o n f i g 0 ) %% %% −> v o i d ( ) | { s a v e c o n f i g . %% − I f both c r i t e r i a s above a r e f u l f i l l e d . %% %% − I f i t i s a p o s t c h e c k t e s t c a s e . s t a r t t i m e and a l l o w e d p o s t c h e c k t e s t c a s e s a r e w r i t t e n %% to the postcheck c o n t r o l f i l e . r a n d o m c o n f ( ) } | ConfigUpdated ] . %% − MoShell undo mode i s s t a r t e d t o s a v e undo commands t o a f i l e .%% C a l l s t a n d a r d ueh i n i t f u n c t i o n ConfigUpdated = u e h h e l p e r : i n i t p e r s u i t e u e h ( C o n f i g ) . t h e f o l l o w i n g a c t i o n s a r e done : %% − Target monitor i s s t a r t e d . No a c t i o n i s p e r f o r m e d f o r t h o s e t e s t c a s e s . C o n f i g 1 } %% %% where %% %% ConfigX = [ t u p l e ( ) ] %% %% @doc %% <pre > %% e n d p e r s u i t e i s meant t o be u s e d f o r c l e a n i n g up %% a f t e r i n i t p e r s u i t e . %% − I t i s c h e c k e d i f t h e main t e s t c a s e r e t u r n e d ”TcOk ” . %% − T e s t c a s e name . Reason . %% otherwise i t i s skipped . The f o l l o w i n g i s done : %% %% − C l o s e t e l n e t p o r t t o RNC and 3Gsim %% − C l o s e MoShell p o r t t o RNC %% − D e l e t e p o s t c h e c k c o n t r o l f i l e %% </pre > %% @end %%%=========================================================================== e n d p e r s u i t e ( C o n f i g ) −> %% T e s t s u i t e specific init actions connections %% C a l l s t a n d a r d f u n c t i o n t o c l o s e mos and t e l n e t %% and d i s a b l e s t a n d a r d t r a c e s ok = u e h h e l p e r : e n d p e r s u i t e u e h ( C o n f i g ) . %% − I f i t i s n o t a p o s t c h e c k t e s t c a s e . C o n f i g 0 ) %% %% −> C o n f i g 1 | { s k i p . %% %% </pre > 30 . t h e p o s t c h e c k t e s t c a s e i s run . %% Add any t e s t suite specific init actions here %% Return t e s t s u i t e c o n f i g [ { c o n f .

MonConfTgs . TgsPid ) . %% Add t h e c o d e f o r e x t r a t r a c e s MosPid = r c c s u p p o r t : g e t h a n d l e ( ? RCC MOS PID . ” a l l ” ) . { ok . %% Return c o n f i g p a r a m e t e r s [ { t e s t c a s e . T e s t C a se } | C o n f i g ] . NewConfig ) . } = r c c m o s : s t a r t m o s u n d o m o d e ( NewConfig ) . %% 31 . C o n f i g 0 ) %% %% −> v o i d ( ) | { s a v e c o n f i g . %% − The end t i m e and t e s t c a s e v e r d i c t i s w r i t t e n t o t h e p o s t c h e c k c o n t r o l %% file . RncPid ) . { ok . { ?RCC RNC MON PID. TgsMonPid } | NewConfig ] . ?MODULE) . %% − Any r e m a i n i n g UE’ s a r e s t o p p e d and d e l e t e d i n 3Gsim . C o n f i g ) . ?RCC TGS MONITOR) . NewConfig = [ { ?RCC TESTCASE. ?MODULE) .%% @end %%%=========================================================================== i n i t p e r t e s t c a s e ( t c i n i t . C o n f i g ) −> u e h h e l p e r : i n i t p e r t e s t c a s e u e h ( t c i n i t e n d . MosPid ) end . t h e f o l l o w i n g a c t i o n s a r e done : %% − Target monitor i s stopped . −> %% Stop and d e l e t e a l l UE’ s i n c a s e some a r e h a n g i n g from p r e v i o u s %% c r a s h e d t e s t c a s e r c c t g s : s t o p d e l u e ( TgsPid . ?RCC RNC MONITOR) . T e st C a s e } . RncPid = r c c s u p p o r t : g e t h a n d l e ( ? RCC RNC PID . MonConf = c t : g e t c o n f i g ( r n c m o n i t o r ) ++ [{ telnet . C o n f i g . C o n f i g . TgsPid = r c c s u p p o r t : g e t h a n d l e ( ? RCC TGS PID . C o n f i g . RncMonPid } . %%%=========================================================================== %% @spec e n d p e r t e s t c a s e ( TestCase . i n i t p e r t e s t c a s e ( TestCase . ?MODULE) . C o n f i g ) . MonConfTgs= c t : g e t c o n f i g ( t g s m o n i t o r ) ++ [{ telnet . r c c t h : s t a r t c o n f i g t r a c e s ( TestCase . %% No a c t i o n i s p e r f o r m e d f o r t h o s e t e s t c a s e s . cpp tm : s t a r t m o n i t o r ( TgsMonPid . ct : g e t c o n f i g ( host ) } ] . %% − I f i t i s n o t a p o s t c h e c k t e s t c a s e . C o n f i g 1 } | { f a i l . C o n f i g ) −> u e h h e l p e r : i n i t p e r t e s t c a s e u e h ( t c i n i t . %% − Then a c h e c k i s made t o s e e i f t h e c u r r e n t t e s t c a s e c o n t a i n s s t r i n g %% ” postcheck ”. %% S t a r t t a r g e t m o n i t o r cpp tm : s t a r t m o n i t o r ( RncMonPid . c a s e RncMonPid o f u n d e f i n e d −> %% T h i s i s p o s t c h e c k t e s t c a s e − do n o t h i n g ok . TgsMonPid } = r c c t h : i n i t t m ( NewConfig . ct : get config ( tgs host )}] . Reason } %% %% where %% T e s t C a se = atom ( ) %% ConfigX = [ t u p l e ( ) ] %% Reason = term ( ) %% %% @doc %% <pre > %% T h i s p a r t c o n t a i n s a c t i o n s which must be done a f t e r e a c h t e s t c a s e . { ok . MonConf . %% The f o l l o w i n g i s done : %% %% − A c h e c k i s made t o s e e i f t h e t e s t c a s e name i s ” t c i n i t ” o r %% ” tc init end ”. C o n f i g ) −> u e h h e l p e r : c h e c k t c i n i t r u n ( C o n f i g . i n i t p e r t e s t c a s e ( t c i n i t e n d . RncMonPid } = r c c t h : i n i t t m ( NewConfig . %% − A l l Mo c h a n g e s a r e r e s t o r e d by r u n n i n g t h e t e s t c a s e undo f i l e . { ?RCC TGS MON PID .

integer () . MosPid ) end . e n d p e r t e s t c a s e ( TestCase . %% %% To s p e c i f y i n which o r d e r g r o u p s s h o u l d be e x e c u t e d %% ( a l s o with r e s p e c t to t e s t c a s e s that a r e not part %% o f any group ) . P r o p e r t i e s . tc rob postcheck exc err ]}]} . %% </pre > %% @end %%%=========================================================================== e n d p e r t e s t c a s e ( t c i n i t . %%%=========================================================================== %% @spec g r o u p s ( ) −> [ Group ] %% %% @doc %% <pre > %% Group = { GroupName . N } ] %% GroupsAndTestCases = [ Group | { group . GroupName } %% s h o u l d be added t o t h e a l l /0 l i s t . C o n f i g ) . [ sequence ] . C o n f i g ) −> Config . 32 . [ tc rob postcheck tgsim . ?RCC RNC MONITOR) . C o n f i g ) −> RncPid = r c c s u p p o r t : g e t h a n d l e ( ? RCC RNC PID . RncMonPid = r c c s u p p o r t : g e t h a n d l e ( ?RCC RNC MON PID. %% </pre > %% @end %%%=========================================================================== g r o u p s ( ) −> [{ tgrp init . %% %% Return a l i s t o f group d e f i n i t i o n s . C o n f i g . GroupsAndTestCases } %% GroupName = atom ( ) %% P r o p e r t i e s = [ p a r a l l e l | s e q u e n c e | S h u f f l e | { RepeatType . [ p a r a l l e l ] . t u p l e s on t h e form { group . no a c t i o n s a r e done . r c c t h : s t o p t m ( C o n f i g . integer ()} %% RepeatType = repeat | r e p e a t u n t i l a l l o k | %% r e p e a t u n t i l a l l f a i l | repeat until any ok | %% repeat until any fail %% N = integer () | forever %% %% D e s c r i p t i o n : %% A t e s t c a s e group i s a s e t o f t e s t c a s e s t h a t s h a r e %% c o n f i g u r a t i o n f u n c t i o n s and e x e c u t i o n p r o p e r t i e s . = rcc support : c l e a n i f t e s t c a s e c r a s h ( Config ) . [ tc init ]} . C o n f i g ) −> Config . GroupName } | T e s t C a se ] %% T e s t C a se = atom ( ) %% S h u f f l e = s h u f f l e | { s h u f f l e . C o n f i g ) . r c c t h : s t o p c o n f i g t r a c e s ( TestCase . Seed } %% Seed = { integer () . c a s e RncMonPid o f u n d e f i n e d −> %% T h i s i s p o s t c h e c k t e s t c a s e − do n o t h i n g ok .%% − I f i t i s a p o s t c h e c k t e s t c a s e . ?RCC TGS MONITOR) . ModuleBoards = r c c s u p p o r t : g e t b o a r d s ( module . ModuleBoards ) . %% Remove any custom t r a c e s MosPid = r c c s u p p o r t : g e t h a n d l e ( ? RCC MOS PID . { tgrp rob . { tgrp rob pc . r c c t h : s t o p t m ( C o n f i g . C o n f i g ) . [ ] . C o n f i g ) . e n d p e r t e s t c a s e ( t c i n i t e n d . rcc mos : stop mos undo mode ( Config ) . −> %% Remove t r a c e s r c c t h r u n : s t o p u e i d t r a c e ( RncPid . Config . [ tc rob .

{tgrp all . [ p a r a l l e l ] . I t t y p i c a l l y c o n t a i n s i n i t i a l i z a t i o n %% which must be done f o r e a c h t e s t c a s e . Reason . C o n f i g 1 } %% %% where %% GroupName = atom ( ) %% ConfigX = [ tuple ( ) ] %% Reason = term ( ) %% %% @doc %% <pre > %% i n i t p e r g r o u p i s c a l l e d b e f o r e e a c h t e s t c a s e %% i n t h e s u i t e . no m a t t e r i f t h e c a s e %% b e l o n g s t o a group o r n o t . [ ] . C o n f i g 0 ) %% %% −> %% C o n f i g 1 | { s k i p . [ parallel ] . { tgrp rob vrf pc . %% %% Return ok . [{ tgrp tc . Reason } | { s k i p a n d s a v e . [ tc init end ]} . [ ] . g i v i n g t h e o p p o r t u n i t y t o p e r f o r m c l e a n −up %% a f t e r i n i t p e r g r o u p . %% </pre > %% @end %%%=========================================================================== 33 . no m a t t e r i f t h e c a s e %% b e l o n g s t o a group o r n o t . { tgrp tcs . [ tc rob vrf postcheck tgsim . tgrp tcs } . Config . %% </pre > %% @end %%%=========================================================================== i n i t p e r g r o u p ( GroupName . [ tc rob postcheck tgsim . %% %% Note t h a t i n i t p e r t e s t c a s e i s a l s o e x e c u t e d . [] . Reason } %% where %% %% GroupName = atom ( ) %% ConfigX = [ tuple ( ) ] %% Reason = term ( ) %% %% @doc %% <pre > %% e n d p e r g r o u p i s c a l l e d a f t e r e a c h t e s t c a s e ha s %% f i n i s h e d . %% %% Return a l i s t o f c o n f i g u r a t i o n param / v a l u e t u p l e s . tc init end ] } ] . tc rob vrf postcheck exc err ]}]} . C o n f i g 1 } | { f a i l . {tgrp init end . [ tc rob . C o n f i g 0 ) %% %% −> %% v o i d ( ) | { s a v e c o n f i g . %%%=========================================================================== %% @spec e n d p e r g r o u p ( GroupName . C o n f i g ) −> %% I n i t i a l i z a t i o n needed f o r t h e group c t : comment(”−−−−−−−−−− −− − −− − −− − − −−−−−−−−−−”). [ t c i n i t . [ tc rob vrf . tc rob postcheck exc err . { group . %%%=========================================================================== %% @spec i n i t p e r g r o u p ( GroupName . { tgrp pc . t c r o b v r f ] } . %% %% Note t h a t i n i t p e r t e s t c a s e i s a l s o e x e c u t e d . tc rob vrf postcheck tgsim . tc rob vrf postcheck exc err ]}]} .{ tgrp rob vrf . [ sequence ] . [ sequence ] .

[ { t i m e o u t . C o n f i g 1 } | { s k i p a n d s a v e . Reason } | { comment . } = cpp mos : e x p e c t ( MosPid . ?RCC MOS TIMEOUT } . [ { t i m e o u t . ” s e t u t r a n c e l l=iub −8−2 t c e l l 4 ” . ?RCC MOS TIMEOUT } . . ?RCC MOS TIMEOUT } . [ { t i m e o u t . l i n e . l i n e . ” s e t u t r a n c e l l=iub −8−1 u a r f c n U l 9 6 1 2 ” . %% The f o l l o w i n g i s done : %% %% − MoShell undo mode i s s t a r t e d %% − A c t i v a t e t h e r e q u i r e d f e a t u r e s %% − S e t c h a n n e l s w i t c h i n g t i m e r s t o low v a l u e s i n o r d e r t o t r i g g e r %% downswitch and f a i l e d t e s t c a s e due t o t h r o u g h p u t p r o b l e m s . } = cpp mos : e x p e c t ( MosPid . l i n e . s e n d ] ) . l i n e . } = cpp mos : e x p e c t ( MosPid . ?RCC MOS TIMEOUT } . %% %% </pre > %% @end %%%=========================================================================== t c i n i t ( C o n f i g ) −> TgsPid = r c c s u p p o r t : g e t h a n d l e ( ? RCC TGS PID . ” s e t u t r a n c e l l=iub −8−1 u a r f c n D l 1 0 5 6 2 ” . [ ” 1 MOs s e t ” ] . s e n d ] ) { ok . l i n e . %% R e s t o r i n g U t r a n C e l l c h a n g e s from RABest t e s t s u i t e s i n c e s e t t i n g s %% have been s a v e d i n CV by m i s t a k e { ok . s e n d ] ) { ok . . ?RCC MOS TIMEOUT } . [ { t i m e o u t . [ ” b l d e b s e t c o n f i r m a t i o n =0”] . %%% − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − %%% #5. ” s e t u t r a n c e l l=iub −8−2 u a r f c n U l 9 6 1 2 ” . l i n e . ” s e t U t r a n C e l l=Iub −7−3 t r a n s m i s s i o n S c h e m e 0 ” . [ { t i m e o u t . s e n d ] ) . s e n d ] ) { ok . [ { t i m e o u t . . . ” s e t u t r a n c e l l=Iub −8−1 t c e l l 3 ” . C o n f i g 1 } %% %% where %% %% ConfigX = [ t u p l e ( ) ] %% Reason = term ( ) %% Comment = term ( ) %% %% @doc %% <pre > %% T h i s i s an i n i t t e s t c a s e s p e c i f i c a l l y f o r t h e r o b u s t n e s s t e s t s u i t e . . [ ” T o t a l ” ] . C o n f i g ) −> %% Cleanup what was i n i t i a t e d i n i n i t p e r g r o u p c t : comment(”−−−−−−−−−− −− − −− − −− − − −−−−−−−−−−”). l i n e . ” s e t u t r a n c e l l=iub −8−2 u a r f c n D l 1 0 5 6 2 ” . } = cpp mos : e x p e c t ( MosPid . l i n e . [ ” 1 MOs s e t ” ] .e n d p e r g r o u p ( GroupName . ?RCC MOS TIMEOUT } . [ { t i m e o u t . } = cpp mos : e x p e c t ( MosPid . Comment } | %% { s a v e c o n f i g . [ ” 1 MOs s e t ” ] . } = cpp mos : e x p e c t ( MosPid . [ ” 1 MOs s e t ” ] . C o n f i g ) . %% i n i t p e r t e s t c a s e and e n d p e r t e s t c a s e w i l l n o t be run f o r t h i s TC. } = cpp mos : e x p e c t ( MosPid . %% I t must be e x e c u t e d b e f o r e any o f t h e o t h e r t e s t c a s e s . Reason . } = cpp mos : e x p e c t ( MosPid . TEST CASES %%% − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − %%%=========================================================================== %% @spec t c i n i t ( C o n f i g 0 ) %% %% −> %% ok | e x i t ( ) | { s k i p . s e n d ] ) { ok . s e n d ] ) { ok . [ ” 1 MOs s e t ” ] . [ { t i m e o u t . C o n f i g ) . MosPid = r c c s u p p o r t : g e t h a n d l e ( ? RCC MOS PID . s e n d ] ) { ok . ok . ?RCC MOS TIMEOUT } . ” uv b l d e b s e t c o n f i r m a t i o n =0” . . ?MODULE) . %% Setup RNC C o n f i g u r a t i o n %%=========================================== %% S t a r t undo mode %%=========================================== u e h h e l p e r : o p e n t c i n i t u n d o f i l e ( C o n f i g . ?RCC MOS TIMEOUT } . %% D i s a b l e MoShell c o n f i r m a t i o n f o r b l / deb / s e t { ok . [ ” 1 MOs s e t ” ] . 34 .

{ ok . ?RCC MOS TIMEOUT } . s e n d ] ) . ” s e t channelswitching hsdschInactivityTimerCpc 30” . [ { t i m e o u t . %% Time i n 0 . [ ” 1 MOs s e t ” ] . l i n e . ” b l [ ” 1 MOs s e t ” ] . [ { t i m e o u t . ?RCC MOS BIG TIMEOUT } . ?RCC MOS TIMEOUT } . %% Add t h e below s e t t i n g s s o t h a t t h e o u t p u t f i l e s match t h e b a s e l i n e %% f i l e s { ok . s e n d ] ) . s e n d ] ) . ”. [ ” 1 MOs s e t ” ] . [ { t i m e o u t . } = cpp mos : e x p e c t ( MosPid . { ok . s e n d ] ) . s e n d ] ) . [ { t i m e o u t . [ { t i m e o u t . 1 s a f t e r which a CPC a c t i v a t e d c o n n e c t i o n w i t h low %% t h r o u g h p u t i s downswitched from CELL DCH t o CELL FACH . Hsdsch ?RCC MOS TIMEOUT } . } = cpp mos : e x p e c t ( MosPid . l i n e . [ { t i m e o u t . ” s e t channelswitching inacti vityT imer 3” . %% Time i n s a f t e r which an i n a c t i v e c o n n e c t i o n i n CELL FACH s t a t e i s %% downswitched t o URA PCH s t a t e . ” s e t channelswitching i n a c t i v i t y T i m e M u l t i P s I n t e r a c t i v e 30” . s e n d ] ) . ” s e t handover f d d I f h o S u p p 1 ” . [ { t i m e o u t . l i n e . ?RCC MOS TIMEOUT } . } = cpp mos : e x p e c t ( MosPid . %% Time i n 0 . } = cpp mos : e x p e c t ( MosPid . } = cpp mos : e x p e c t ( MosPid . ?RCC MOS TIMEOUT } . [ ” T o t a l ” ] . ?RCC MOS TIMEOUT } . { ok . [ { t i m e o u t . [ ” T o t a l ” ] . [ { t i m e o u t . } = cpp mos : e x p e c t ( MosPid . } = cpp mos : e x p e c t ( MosPid . l i n e . ” s e t channelswitching hsdschInactivityTimer 3” . %% Lock HSDPA t o c r e a t e R99 c e l l s { ok . ” s e t r n c f e a t u r e=HspaLoadSharing f e a t u r e s t a t e 1 ” . l i n e . s e n d ] ) . %% A c t i v a t e a d d i t i o n a l l i c e n c e s } = cpp mos : e x p e c t ( MosPid . %% A c t i v a t e Dch and Hspa IFLS f e a t u r e s { ok . ?RCC MOS BIG TIMEOUT } . } = cpp mos : e x p e c t ( MosPid . ” s e t r n c f e a t u r e=H s d p a M o b i l i t y P h a s e f e a t u r e s t a t e 1 ” . { ok . ” s e t r n c f e a t u r e=DchLoadSharing f e a t u r e s t a t e 1 ” . [ ” T o t a l ” ] . ?RCC MOS TIMEOUT } . l i n e . ” s e t r n c f e a t u r e=I f I r a t M o b i l i t y H s d p a E u l f e a t u r e s t a t e 1 ” . [ ” 1 MOs s e t ” ] . ” s e t r n c f u n c t i o n hsCellChangeAllowed 1” . } = cpp mos : e x p e c t ( MosPid . } = cpp mos : e x p e c t ( MosPid . ?RCC MOS BIG TIMEOUT } . s e n d ] ) . { ok . ”. [ { t i m e o u t . %% S e t handover and r n c f u n c t i o n p a r a m e t e r s 35 . [ { t i m e o u t . Hsdsch ?RCC MOS TIMEOUT } . l i n e . s e n d ] ) . ” b l [ ” 1 MOs s e t ” ] . } = cpp mos : e x p e c t ( MosPid . l i n e . [ ” 1 MOs s e t ” ] . l i n e . send ] ) . } = cpp mos : e x p e c t ( MosPid . u t r a n c e l l=iub −3 −1. u t r a n c e l l=iub −4 −3. { ok . s e n d ] ) . 1 s a f t e r which an i n a c t i v e RB i n a RAB c o m b i n a t i o n %% c o n t a i n i n g PS I n t e r a c t i v e i s r e l e a s e d . send ] ) . %% A c t i v a t e a l l RabCombination f e a t u r e s { ok . ” s e t r n c f e a t u r e=r a b c o m b i n a t i o n f e a t u r e s t a t e 1 ” . [ ” 1 MOs s e t ” ] . [ { t i m e o u t . [ { t i m e o u t . l i n e . l i n e . l i n e . T h i s p a r a m e t e r %% i s u s e d i n s t e a d o f h s d s c h I n a c t i v i t y T i m e r f o r CPC a c t i v a t e d %% c o n n e c t i o n s . { ok . { ok . { ok .%% A c t i v a t e t h e r e q u i r e d features %% S e t f e a t u r e s t a t e f o r a l l f e a t u r e s t o D i s a b l e d . u t r a n c e l l=iub −3 −6. [ { t i m e o u t . { ok . [ ” T o t a l ” ] . l i n e . [ { t i m e o u t . l i n e . l i n e . ” s e t r n c f e a t u r e f e a t u r e s t a t e 0” . } = cpp mos : e x p e c t ( MosPid . } = cpp mos : e x p e c t ( MosPid . [ ” T o t a l ” ] . [ ” 1 MOs s e t ” ] . s e n d ] ) . Hsdsch ?RCC MOS TIMEOUT } . send ] ) . { ok . [ ” T o t a l ” ] . ”. ?RCC MOS TIMEOUT } . ?RCC MOS TIMEOUT } . s e n d ] ) . ” b l [ ” 1 MOs s e t ” ] . %% Time i n s a f t e r which a c o n n e c t i o n w i t h low t h r o u g h p u t i s downswitched %% from HS−DSCH t o CELL FACH . ?RCC MOS TIMEOUT } .

U t r a n C e l l=Iub − 3 − 5”. % [ ” 1 MOs s e t ” ] . % [ ” 1 MOs s e t ” ] . c o v e r a g e r e l a t i o n=Iub −3−4 I u b − 4 − 1”) . h s L o a d S h a r i n g =0” . [ ” Proxy ID = ” ] . ?RCC MOS TIMEOUT } . l i n e . ok = cpp mos : s e n d ( MosPid . % [ ” 1 MOs s e t ” ] . ”y ” . % { ok . s e n d ] ) . % % { ok . ?RCC MOS TIMEOUT } . [ ” 1 MOs s e t ” ] . U t r a n C e l l=Iub − 3 − 3”. } = cpp mos : e x p e c t ( MosPid . ” l s e t RncFunction=1$ h s O n l y B e s t C e l l 0 ” . % ” s e t U t r a n C e l l=Iub −3−4 i f l s M o d e 2” . ?RCC MOS TIMEOUT } . } = cpp mos : e x p e c t ( MosPid . % ” s e t U t r a n C e l l=Iub −3−4 h s I f l s M a r g i n U s e r s 30” . % [ { t i m e o u t . s e n d ] ) . } = cpp mos : e x p e c t ( MosPid . s e n d ] ) . ?RCC MOS TIMEOUT } . [ { t i m e o u t . h s L o a d S h a r i n g =1” . ?RCC MOS TIMEOUT } . u t r a n r e l a t i o n=I n t r a −Iub − 6”) . l i n e . % { ok . ” d e l U t r a n C e l l=Iub − 3 − [1 − 6] . ?RCC MOS TIMEOUT } . l i n e . % ” c r u t r a n c e l l=Iub −3 −4. % ” c r u t r a n c e l l=Iub −3 −4. } = cpp mos : e x p e c t ( MosPid . h s C e l l S e l e c t i o n =0 . [ ”MOs d e l e t e d ” ] . { ok . [ { t i m e o u t . % [ ” Proxy ID = ” ] . ?RCC MOS TIMEOUT } . } = cpp mos : e x p e c t ( MosPid . % ” s e t c o v e r a g e r e l a t i o n=Iub −3−6 I u b −3−3 r e l a t i o n C a p a b i l i t y ” % ” d c h L o a d S h a r i n g =0 . % % %% HS l o a d s h a r i n g c o v e r a g e r e l a t i o n s % ok = cpp mos : s e n d ( MosPid . ”y ” . U t r a n C e l l=Iub − 3 − 2”. % % { ok . s e n d ] ) . l i n e . [ { t i m e o u t . l i n e . s e n d ] ) . } = cpp mos : e x p e c t ( MosPid . c o v e r a g e r e l a t i o n=Iub −4−3 I u b − 3 − 5”) . % ” s e t c o v e r a g e r e l a t i o n=Iub −3−4 I u b −4−1 r e l a t i o n C a p a b i l i t y ” % ” d c h L o a d S h a r i n g =0 . % [ ” 1 MOs s e t ” ] . 36 . [ ”MOs d e l e t e d ” ] . l i n e . } = cpp mos : e x p e c t ( MosPid . s e n d ] ) . ?RCC MOS TIMEOUT } . % ” c r u t r a n c e l l=Iub −4 −3. l i n e . ?RCC MOS TIMEOUT } . % ” RncFunction =1 . { ok . s e n d ] ) . % % ok = cpp mos : s e n d ( MosPid . ?RCC MOS TIMEOUT } . % % ok = cpp mos : s e n d ( MosPid . [ { t i m e o u t . ?RCC MOS TIMEOUT } . [ ” 1 MOs s e t ” ] . [ { t i m e o u t . s e n d ] ) . [ { t i m e o u t . h s C e l l S e l e c t i o n =1 . [ { t i m e o u t . l i n e . % [ { t i m e o u t . [ { t i m e o u t . s e n d ] ) . [ { t i m e o u t . } = cpp mos : e x p e c t ( MosPid . l i n e . s e n d ] ) . % %% Coverage r e l a t i o n s c a n n o t be d e f i n e u n t i l TR HO40784 % %% ha s been f i x e d i n 3 gsim . } = cpp mos : e x p e c t ( MosPid . s e n d ] ) . % ” RncFunction =1 . % [ ” 1 MOs s e t ” ] . % { ok . U t r a n C e l l=Iub − 4 − 1”. u t r a n r e l a t i o n=I n t e r −Iub − 6”) . % { ok . } = cpp mos : e x p e c t ( MosPid . } = cpp mos : e x p e c t ( MosPid . l i n e . h s L o a d S h a r i n g =0” . ?RCC MOS TIMEOUT } . [ ” Proxy ID = ” ] . % { ok . % [ ” 1 MOs s e t ” ] . } = cpp mos : e x p e c t ( MosPid . } = cpp mos : e x p e c t ( MosPid . s e n d ] ) . c o v e r a g e r e l a t i o n=Iub −3−6 I u b − 3 − 3”) . % ” RncFunction =1 . [ { t i m e o u t . c o v e r a g e r e l a t i o n=Iub −3−4 I u b − 3 − 2”) . % { ok . [ { t i m e o u t . l i n e .{ ok . l i n e . l i n e . h s L o a d S h a r i n g =1” . ” l s e t RncFunction =1 . s e n d ] ) . Handover=1 i f l s H y s t 2 0 ” . % % { ok . % % %% HS s e l e c t i o n c o v e r a g e r e l a t i o n s % ok = cpp mos : s e n d ( MosPid . % ” s e t U t r a n C e l l=Iub −3−4 h s I f l s T h r e s h U s e r s 1” . % ” s e t c o v e r a g e r e l a t i o n=Iub −4−3 I u b −3−5 r e l a t i o n C a p a b i l i t y ” % ” d c h L o a d S h a r i n g =0 . [ { t i m e o u t . s e n d ] ) . % [ ” 1 MOs s e t ” ] . % { ok . h s C e l l S e l e c t i o n =0 . % ” c r u t r a n c e l l=Iub −3 −6. [ { t i m e o u t . s e n d ] ) . h s C e l l S e l e c t i o n =1 . %% Remove u t r a n r e l a t i o n from Iub −3 and IUb −4 t o o t h e r Iub ’ s ok = cpp mos : s e n d ( MosPid . % ” RncFunction =1 . l i n e . ” d e l U t r a n C e l l=Iub − 3 − [1 − 6] . % [ ” Proxy ID = ” ] . } = cpp mos : e x p e c t ( MosPid . ?RCC MOS TIMEOUT } . } = cpp mos : e x p e c t ( MosPid . ?RCC MOS TIMEOUT } . l i n e . ?RCC MOS TIMEOUT } . % ” s e t c o v e r a g e r e l a t i o n=Iub −3−4 I u b −3−2 r e l a t i o n C a p a b i l i t y ” % ” d c h L o a d S h a r i n g =0 . { ok . % { ok .

” s e t U t r a n C e l l=Iub −4−1 h s I f l s M a r g i n U s e r s 20” . { ok . ” s e t U t r a n C e l l=Iub −4−2 d c h I f l s T h r e s h C o d e 1” . [ ” 1 MOs s e t ” ] . ” s e t U t r a n C e l l=Iub −4−2 d c h I f l s T h r e s h P o w e r 1” . { ok . { ok . ” s e t U t r a n C e l l=Iub −4−4 i f l s M o d e 2” . h s C e l l S e l e c t i o n =0 . . s e n d ] ) . [ ” 1 MOs s e t ” ] . [ ” 1 MOs s e t ” ] . send ] ) . l i n e . l i n e } = cpp mos : e x p e c t ( MosPid . ?RCC MOS TIMEOUT } . l i n e . . [ { t i m e o u t . [ ” 1 MOs s e t ” ] . [ { t i m e o u t . ?RCC MOS TIMEOUT } . ” RncFunction =1 . ?RCC MOS TIMEOUT } . [ { t i m e o u t . send ] ) . h s C e l l S e l e c t i o n =0 . l i n e . ok { ok . [ { t i m e o u t . { ok . } = cpp mos : e x p e c t ( MosPid . [ { t i m e o u t . ” s e t U t r a n C e l l=Iub −3−2 h s I f l s M a r g i n U s e r s 20” . ?RCC MOS TIMEOUT } . ” s e t U t r a n C e l l=Iub −4−4 d c h I f l s T h r e s h C o d e 2” . ” s e t c o v e r a g e r e l a t i o n=Iub −4−2 I u b −4−4 r e l a t i o n C a p a b i l i t y ” ” d c h L o a d S h a r i n g =1 . = cpp mos : s e n d ( MosPid . ?RCC MOS TIMEOUT } . l i n e . ” s e t U t r a n C e l l=Iub −3−2 i f l s M o d e 2” . l i n e } = cpp mos : e x p e c t ( MosPid . [ { t i m e o u t . { ok . ” s e t U t r a n C e l l=Iub −4−1 i f l s M o d e 2” . send ] ) . { ok . { ok . [ ” 1 MOs s e t ” ] . [ { t i m e o u t . { ok . ” s e t U t r a n C e l l=Iub −4−4 d c h I f l s M a r g i n C o d e 60” . [ ” 1 MOs s e t ” ] . l i n e } = cpp mos : e x p e c t ( MosPid . l i n e . } = cpp mos : e x p e c t ( MosPid . s e n d ] ) . . U t r a n C e l l=Iub − 3 − 6”. ” RncFunction =1 . send ] ) . . ?RCC MOS TIMEOUT } . [ ” 1 MOs s e t ” ] . . [ ” 1 MOs s e t ” ] . [ { t i m e o u t . { ok . c o v e r a g e r e l a t i o n=Iub −4−2 I u b − 4 − 4”) . [ { t i m e o u t . . s e n d ] ) . ?RCC MOS TIMEOUT } . { ok . ” c r u t r a n c e l l=Iub −4 −2. [ ” 1 MOs s e t ” ] . ?RCC MOS TIMEOUT } . l i n e } = cpp mos : e x p e c t ( MosPid . [ { t i m e o u t . send ] ) . send ] ) . } = cpp mos : e x p e c t ( MosPid . { ok . l i n e } = cpp mos : e x p e c t ( MosPid . [ ” 1 MOs s e t ” ] . l i n e . [ ” Proxy ID = ” ] . h s L o a d S h a r i n g =0” . } = cpp mos : e x p e c t ( MosPid . l i n e . %% DCH l o a d s h a r i n g c o v e r a g e r e l a t i o n s ok = cpp mos : s e n d ( MosPid . . 37 . s e n d ] ) . s e n d ] ) . } = cpp mos : e x p e c t ( MosPid . { ok . s e n d ] ) . { ok . l i n e } = cpp mos : e x p e c t ( MosPid . [ ” 1 MOs s e t ” ] . [ ” 1 MOs s e t ” ] .% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % { ok . c o v e r a g e r e l a t i o n=Iub −4−2 I u b − 3 − 6”) . { ok . ” s e t U t r a n C e l l=Iub −4−2 i f l s M o d e 2” . [ ” 1 MOs s e t ” ] . ?RCC MOS TIMEOUT } . ?RCC MOS TIMEOUT } . s e n d ] ) . [ ” 1 MOs s e t ” ] . l i n e . l i n e . ?RCC MOS TIMEOUT } . ” s e t U t r a n C e l l=Iub −4−2 d c h I f l s M a r g i n P o w e r 90” . ?RCC MOS TIMEOUT } . send ] ) . [ { t i m e o u t . ?RCC MOS TIMEOUT } . [ ” 1 MOs s e t ” ] . . l i n e . [ { t i m e o u t . [ { t i m e o u t . [ ” 1 MOs s e t ” ] . { ok . [ ” Proxy ID = ” ] . [ { t i m e o u t . [ ” 1 MOs s e t ” ] . l i n e } = cpp mos : e x p e c t ( MosPid . ?RCC MOS TIMEOUT } . h s L o a d S h a r i n g =0” . ” c r u t r a n c e l l=Iub −4 −2. ” s e t U t r a n C e l l=Iub −4−1 h s I f l s T h r e s h U s e r s 5” . [ { t i m e o u t . } = cpp mos : e x p e c t ( MosPid . ?RCC MOS TIMEOUT } . ?RCC MOS TIMEOUT } . ?RCC MOS TIMEOUT } . } = cpp mos : e x p e c t ( MosPid . ” s e t U t r a n C e l l=Iub −4−4 d c h I f l s T h r e s h P o w e r 2” . } = cpp mos : e x p e c t ( MosPid . s e n d ] ) . [ { t i m e o u t . ” s e t c o v e r a g e r e l a t i o n=Iub −4−2 I u b −3−6 r e l a t i o n C a p a b i l i t y ” ” d c h L o a d S h a r i n g =1 . ?RCC MOS TIMEOUT } . . { ok . ?RCC MOS TIMEOUT } . { ok . [ { t i m e o u t . s e n d ] ) . send ] ) . } = cpp mos : e x p e c t ( MosPid . ” s e t U t r a n C e l l=Iub −4−2 d c h I f l s M a r g i n C o d e 90” . } = cpp mos : e x p e c t ( MosPid . l i n e } = cpp mos : e x p e c t ( MosPid . U t r a n C e l l=Iub − 4 − 4”. l i n e } = cpp mos : e x p e c t ( MosPid . send ] ) . ” s e t U t r a n C e l l=Iub −3−2 h s I f l s T h r e s h U s e r s 5” . s e n d ] ) . } = cpp mos : e x p e c t ( MosPid . { ok . [ { t i m e o u t . [ { t i m e o u t . ” s e t U t r a n C e l l=Iub −4−4 d c h I f l s M a r g i n P o w e r 60” .

send ] ) . l i n e } = cpp mos : e x p e c t ( MosPid . ?RCC MOS TIMEOUT } . c c h − mm − .% % % % % % % % % % % % % % % % % [ ” 1 MOs s e t ” ] . ?RCC MOS TIMEOUT } . { prompts . s e n d ] ) { ok . l i n e . T r i g g e r s ) ) . [ ”EXECUTED” ] . s e n d ] ) . − . 5 0 . ?RCC MOS TIMEOUT } . 0 . ∗ ” ” −sm a c t i v a t e 1 . [ ” 1 MOs s e t ” ] . %%=========================================== %% Save undo f i l e %%=========================================== u e h h e l p e r : c l o s e t c i n i t u n d o f i l e ( C o n f i g . s e n d ] ) { ok . −” ” −sm a c t i v a t e 1 . l i n e . { prompts . 7 0 . [ ” 1 MOs s e t ” ] . { ok . [ ” 1 MOs s e t ” ] . string : join ( l i s t s : duplicate (5 . ” ) . ”3 gsim cb e u l h s 2 0 s 3 xPsIntEUL HS ” . a c t i v a t e 3 . ”3 gsim mb 3 xPsIntEUL HS − v a l i d r a b s t a t e s ∗ . %% 3 xPsIntEUL HS %% Ue 000002 { ok . [ { t i m e o u t . i n t e u l h s ” . 5 0 ” ” −d l r l c s d u s i z e 100 . . { ok . 2 0 . [ { t i m e o u t . 2 5 . 5 0 . [ { t i m e o u t . ”3 gsim cb i n t 6 4 2 0 s p s i n t f a c h u r a f a c h ” . { ok . − . . { prompts . ”3 gsim mb 3 xPsIntEUL HS − mm − . T r i g g e r s ) ) . [ { t i m e o u t .100” ” − d l p a c k e t r a t e 7 0 . [ ” 1 MOs s e t ” ] . [ ”EXECUTED” ] . 0 . ” s e t U t r a n C e l l=Iub −3−6 d c h I f l s T h r e s h P o w e r 2” . c c h ” ” −u l p a c k e t r a t e 5 0 . [ ”EXECUTED” ] . 1 7 . . − . [ { t i m e o u t . ” ) ] . cch . ” ”2 x i n t e u l h s . 0 . s e n d ] ) { ok . 5 0 . { prompts . 5 0 . . { prompts . 0 ” ” −d l r l c s d u s i z e 2 0 . ?RCC MOS TIMEOUT } . ?RCC MOS TIMEOUT } . 0 . } = c p p t e l n e t : e x p e c t ( TgsPid . [ ”EXECUTED” ] . T r i g g e r s ) ) . ” . ” .100 . s e n d ] ) . u n l i m i t e d } . ∗ . { prompts . ” ” d e a c t i v a t e 2 . [ { t i m e o u t . 38 . %% Setup 3GSim C o n f i g u r a t i o n T r i g g e r s = g e t c o n f ( tb . } = c p p t e l n e t : e x p e c t ( TgsPid . u n l i m i t e d } . send ] ) . 0 . ”3 gsim mb 3 xPsIntEUL HS − u l r l c s d u s i z e 2 0 . 7 0 . { ok . TriggersN = [ string : join ( l i s t s : duplicate (4 . . − − t r i g g e r s ” ” ”++ l i s t s : nth ( 2 . 2 x i n t e u l h s . [ ” 1 MOs s e t ” ] . l i n e } = cpp mos : e x p e c t ( MosPid . ?RCC MOS TIMEOUT } . . i n t u r a u r a . 3 x i n t e u l h s . ”3 gsim mb p s i n t f a c h u r a f a c h − w a i t b e f o r e s t a r t 2000” ” − t r i g g e r s ”++ l i s t s : nth ( 1 . − . l i s t s : nth ( 2 . } = cpp mos : e x p e c t ( MosPid . s e n d ] ) . l i n e } = cpp mos : e x p e c t ( MosPid . ?RCC MOS TIMEOUT } . { prompts . %% D e f i n e any s p e c i f i c T r a f f i c B e h a v i o u r s %% T r a f f i c B e h a v i o u r ” d c h t o f a c h t o u r a ” %% Ue 000001 { ok . 5 0 . − . − . ”3 gsim mb 3 xPsIntEUL HS − u l r l c s d u s i z e 5 0 . l i n e } = cpp mos : e x p e c t ( MosPid . ∗ . send ] ) .100 . − . u n l i m i t e d } . [ { t i m e o u t . ?RCC MOS TIMEOUT } . ” s e t U t r a n C e l l=Iub −3−6 d c h I f l s T h r e s h C o d e 2” . [ { t i m e o u t . [ ”EXECUTED” ] . i n t u r a u r a . [ { t i m e o u t . u n l i m i t e d } . [ { t i m e o u t . send ] ) . 0 ” .100 . ” . } = c p p t e l n e t : e x p e c t ( TgsPid . } = c p p t e l n e t : e x p e c t ( TgsPid . T r i g g e r s N )++” − w a i t b e f o r e s t a r t 2000” ” −r a b s t a t e i n t e u l h s . l i s t s : nth ( 1 . 2 0 ” ” − v a l i d r a b s t a t e s ∗ . . [ { t i m e o u t . { ok .0” ” − d l p a c k e t r a t e 2 0 . ” s e t U t r a n C e l l=Iub −3−6 d c h I f l s M a r g i n C o d e 50” . 7 0 . C o n f i g ) . u n l i m i t e d } . ?RCC MOS TIMEOUT } . 0 . 2 0 −d l p a c k e t r a t e 5 0 . 0 . ?RCC MOS TIMEOUT } . 7 0 . [ { t i m e o u t . a c t i v a t e 2 . 5 0 . ” ) . l i s t s : nth ( 3 . u n l i m i t e d } . ” s e t U t r a n C e l l=Iub −3−6 d c h I f l s M a r g i n P o w e r 50” . ?RCC MOS TIMEOUT } . 7 0 ” . } = c p p t e l n e t : e x p e c t ( TgsPid . [ ”EXECUTED” ] . { ok . ?MODULE) .100 . cch . . ∗ . u n l i m i t e d } . s e n d ] ) . [ ”EXECUTED” ] . } = c p p t e l n e t : e x p e c t ( TgsPid . 0 ” ” −u l p a c k e t r a t e 2 0 . 5 0 ” ” −u l p a c k e t r a t e 5 0 .0 . string : join ( l i s t s : duplicate (7 . T r i g g e r s N)++ ” − r a b s t a t e i n t 6 4 6 4 . 5 0 . ?RCC MOS TIMEOUT } . s e n d ] ) { ok . [ { t i m e o u t . } = c p p t e l n e t : e x p e c t ( TgsPid . send ] ) . d e a c t i v a t e 3 ” .100 . ” s e t U t r a n C e l l=Iub −3−6 i f l s M o d e 2” . − ” . 5 0 . ?RCC MOS TIMEOUT } .

[ ”EXECUTED” ] . s e n d ] ) . { prompts . u n l i m i t e d } . [ { t i m e o u t . } = c p p t e l n e t : e x p e c t ( TgsPid . 7 0 . I n t e r v a l s )++ ” − f a c h c e l l r e s e l e c t i o n i n t e r v a l 100000”++ ” −u r a c e l l r e s e l e c t i o n i n t e r v a l 100000” . 0 . 7 0 . { ok .70 . s e n d ] ) . [ { t i m e o u t . 0 . 0 ” . ”3 gsim mb s p i n t − w a i t b e f o r e s t a r t 2000” ” − t r i g g e r s ”++ l i s t s : nth ( 3 . a c t i v a t e 1 ” . 0 . 0 . I n t e r v a l s ) . u n l i m i t e d } . 5 0 . 0 . 0 ” .0” ” −d l p a c k e t r a t e 2 0 . { prompts . speech 12 2 2xint eul hs . %% M o b i l i t y i n t e r v a l s I n t e r v a l s = g e t c o n f (mb. [ ”EXECUTED” ] . ?RCC MOS TIMEOUT } . u n l i m i t e d } . 0 . ”3 gsim cb r a n d o m c e l l s r a n d o m c e l l s 3 s ” . s e n d ] ) . 6 0 . 8 0 ” . u n l i m i t e d } . ”3 gsim mb s p i n t − u l p a c k e t r a t e 2 0 . u n l i m i t e d } . ?RCC MOS TIMEOUT } . 0 ” ” −d l r l c s d u s i z e 3 0 . [ { t i m e o u t . 0 ” ” − d l r l c s d u s i z e 2 0 . speech 12 2 . s e n d ] ) . a c t i v a t e 2 . { prompts .{ ok . 6 0 ” ” −u l r l c s d u s i z e 100 . u n l i m i t e d } . 7 0 . − . [ ”EXECUTED” ] . %% T r a f f i c B e h a v i o u r ” s p e e c h + P s I n t ” %% Ue 000003 { ok . { ok . ?RCC MOS TIMEOUT } . s e n d ] ) . T r i g g e r s N)++ ” −r a b s t a t e i n t e u l h s . } = c p p t e l n e t : e x p e c t ( TgsPid . 0 . − . ”3 gsim cb r a n d o m c e l l s r a n d o m c e l l s 5 s ” . [ { t i m e o u t . ” ” speech 12 2 int 0 0 . ?RCC MOS TIMEOUT } . ?RCC MOS TIMEOUT } . ”3 gsim mb r a n d o m c e l l s 5 s − l e g c h a n g e i n t e r v a l ” 39 . 0 . } = c p p t e l n e t : e x p e c t ( TgsPid .∗ . s e n d ] ) . 5 0 ” ” − d l r l c s d u s i z e 1 0 0 . %% Copy random c e l l s m o b i l i t y b e h a v i o r and r e d u c e l e g change i n t e r v a l %% Ue 000003 { ok . 5 0 . s e n d ] ) .0” ” − d l p a c k e t r a t e 3 0 . ”3 gsim mb 3 xPsIntEUL HS − u l r l c s d u s i z e 3 0 . − . 0 . s p e e c h 1 2 2 i n t e u l h s . ?RCC MOS TIMEOUT } . 0 . { prompts .∗ − mm − . } = c p p t e l n e t : e x p e c t ( TgsPid .∗ . [ { t i m e o u t . 0 . [ { t i m e o u t . − . 0 .0 . u n l i m i t e d } . ”3 gsim mb r a n d o m c e l l s 3 s − l e g c h a n g e i n t e r v a l ” ” ”++ l i s t s : nth ( 1 . } = c p p t e l n e t : e x p e c t ( TgsPid . u n l i m i t e d } . } = c p p t e l n e t : e x p e c t ( TgsPid . 0 . − . ”3 gsim cb i n t 6 4 2 0 s s p i n t ” . 8 0 . [ ”EXECUTED” ] . [ { t i m e o u t . 1 0 0 . 6 0 . 0 . − . ?RCC MOS TIMEOUT } .100 . d e a c t i v a t e 1 . { ok . { prompts . ” ” d e a c t i v a t e 2 . s e n d ] ) . } = c p p t e l n e t : e x p e c t ( TgsPid . 0 . ”3 gsim cb r a n d o m c e l l s r a n d o m c e l l s 4 s ” . ”3 gsim mb r a n d o m c e l l s 4 s − l e g c h a n g e i n t e r v a l ” ” ”++ l i s t s : nth ( 2 .” ” speech 12 2 int eul hs . s e n d ] ) .∗ .50 .0 . ?RCC MOS TIMEOUT } . ?RCC MOS TIMEOUT } . { ok .∗ . 5 0 . 5 0 . [ ”EXECUTED” ] . s p e e c h 1 2 2 i n t e u l h s ” ” −v a l i d r a b s t a t e s ∗ . ?RCC MOS TIMEOUT } . %% Copy random c e l l s m o b i l i t y b e h a v i o r and r e d u c e l e g change i n t e r v a l %% Ue 000002 { ok . 0 .0 . [ { t i m e o u t . 7 0 .0 . } = c p p t e l n e t : e x p e c t ( TgsPid . 0 ” ” −u l p a c k e t r a t e 3 0 . − .80” ” −d l p a c k e t r a t e 5 0 . [ { t i m e o u t . −” ” −sm a c t i v a t e 1 . 0 .0 .80 .0 . [ ”EXECUTED” ] . u n l i m i t e d } . 0 . { prompts . 8 0 . { ok . ”3 gsim mb s p i n t − u l p a c k e t r a t e 5 0 . { prompts . 5 0 . [ ”EXECUTED” ] . [ ”EXECUTED” ] . u n l i m i t e d } . 0 . 5 0 . { prompts .70 . %% Copy random c e l l s m o b i l i t y b e h a v i o r and r e d u c e l e g change i n t e r v a l %% Ue 000001 { ok . 1 0 0 .100 . 0 . C o n f i g ) . 0 ” ” −u l r l c s d u s i z e 2 0 . } = c p p t e l n e t : e x p e c t ( TgsPid . 1 7 . [ ”EXECUTED” ] . { prompts . [ ”EXECUTED” ] .0 . } = c p p t e l n e t : e x p e c t ( TgsPid .∗ . 0 . 5 0 . } = c p p t e l n e t : e x p e c t ( TgsPid . { prompts . { ok . s e n d ] ) . [ { t i m e o u t .

C o n f i g ) . C o n f i g ) . s e n d ] ) . { ok . ” 1 0 ” ) . ” 0 0 0 0 0 1 ” . RncPid = r c c s u p p o r t : g e t h a n d l e ( ? RCC RNC PID . [ ”EXECUTED” ] . C o n f i g 1 } | { s k i p a n d s a v e . I n t e r v a l s ) . Comment } | %% { s a v e c o n f i g . %%%=========================================================================== %% %% −> %% ok | e x i t ( ) | { s k i p . %% Setup 3GSim C o n f i g u r a t i o n %% S l e e p 1 s %% C r e a t e UE [ s c = s t a r t c e l l . Reason . %% D e f i n e i m s i 000001 − 000010 w i t h d e f a u l t HLR s u b s c r i b e r d a t a p r o f i l e r c c t g s : d e f i n e h l r s u b s ( TgsPid . SCs)++” −c ∗ ” ” −tb 3 xPsIntEUL HS −mb r a n d o m c e l l s 4 s ” ” − c a p a b i l i t i e s e u l − e l a l l −ns ” . C o n f i g 1 } %% %% where %% %% ConfigX = [ t u p l e ( ) ] %% Reason = term ( ) %% Comment = term ( ) %% %% @doc %% <pre > %% T h i s i s an i n i t end t e s t c a s e f o r IFLS f e a t u r e . SCs . T e s t C a se = r c c s u p p o r t : g e t h a n d l e ( ?RCC TESTCASE. ”3 gsim cu − i ”++ l i s t s : nth ( 1 . bn=b#=den man r i n g e r t i l l ] { ok . UEs)++ ” − s c ”++ l i s t s : nth ( 2 . u n l i m i t e d } . C o n f i g ) . send ] ) . ?CU TIMEOUT } . The f o l l o w i n g i s done : %% %% − MoShell undo f i l e i s run t o r e s t o r e MO c h a n g e s %% − 3Gsim d e f i n i t i o n s a r e d e l e t e d . SCs)++” −c ∗ ” ” −tb p s i n t f a c h u r a f a c h −mb r a n d o m c e l l s 3 s ” ” − c a p a b i l i t i e s e u l − e l a l l −ns ” . 40 . . [ { t i m e o u t . %%%=========================================================================== %% @spec t c r o b ( C o n f i g 0 ) %%%=========================================================================== t c r o b ( C o n f i g ) −> %% UEs { UEs . [ ”EXECUTED” ] . . u n l i m i t e d } . %% 3 gsim cu=h e l p .” ”++ l i s t s : nth ( 3 . { prompts . ”3 gsim cu − i ”++ l i s t s : nth ( 2 . [ { t i m e o u t . UEs)++ ” − s c ”++ l i s t s : nth ( 1 . } = c p p t e l n e t : e x p e c t ( TgsPid . %% Read c o n f i g p a r a m e t e r s TgsPid = r c c s u p p o r t : g e t h a n d l e ( ? RCC TGS PID . C o n f i g ) . } = c p p t e l n e t : e x p e c t ( TgsPid . %% Undo MO s e t t i n g s from t c i n i t command u e h h e l p e r : r u n t c i n i t u n d o f i l e ( C o n f i g . %% I t must be e x e c u t e d a t t h e end o f %% t h e t e s t s u i t e t o r e s t o r e a l l c h a n g e s . %% </pre > %% @end %%%=========================================================================== t c i n i t e n d ( C o n f i g ) −> r c c t g s : cleanup 3gsim ( Config ) . ?RCC MOS TIMEOUT } . ModuleBoards = r c c s u p p o r t : g e t b o a r d s ( module . c = c e l l t o s t a r t i n . Delays } = g e t c o n f ( Config ) . Reason } | { comment . ?MODULE) . { prompts .

[ ”EXECUTED” ] . [ { t i m e o u t . { ok . cpp timer : s l e e p ( ct : g e t c o n f i g ( host ) . s e n d ] ) . [ { t i m e o u t . UEs)++ ” − s c ”++ l i s t s : nth ( 3 . [ { t i m e o u t .[ ”EXECUTED” ] . } = c p p t e l n e t : e x p e c t ( TgsPid . %%========================================================= %% S t a r t u e i d t r a c e on UE %%========================================================= l i s t s : foreach ( f u n ( Ue ) −> r c c t h r u n : s t a r t u e i d t r a c e ( RncPid . u n l i m i t e d } . [ ”EXECUTED” ] . ?CU TIMEOUT } . Config . { prompts . 41 . −> c t : comment ( i o l i b : f w r i t e ( ”˜p<br >˜n<a h r e f =\”˜ s \”> S h o r t l o g </a> <br >˜n˜p ” . u n l i m i t e d } . } = c p p t e l n e t : e x p e c t ( TgsPid . [ UeTrigg ersLengt hUe . ”3 gsim s t o u − i ”++ l i s t s : nth ( 1 . ”3 gsim s t a u − i a l l ” . [ ”EXECUTED” ] . UEs ) . ”3 gsim cu − i 000004 −c 1015” ” −tb c s m t − c a p a b i l i t i e s r 9 9 −ns ” . UeTriggersLengthUe = p l i s t l e n g t h t r i g ( UeTriggers ) . TestCase . } = c p p t e l n e t : e x p e c t ( TgsPid . rcc support : g e t l o g d i r ( Config ) . 1) . [ ”EXECUTED” ] . { prompts . u n l i m i t e d } . %% S l e e p 30 s cpp timer : s l e e p ( ct : g e t c o n f i g ( host ) . ?STOU TIMEOUT } . r c c s u p p o r t : c h e c k u e c t x t r e l e a s e ( Config . ct : g e t c o n f i g ( cpp time server ) . case ( UeTriggersLength ) of [ ] −> c t : comment ( i o l i b : f w r i t e ( ”< f o n t c o l o r =\” g o l d \”>NO TRAFFIC</f o n t > <br >˜n˜p ” . PathShort . g e t c o n f ( C o n f i g ) ] ) ) end . r c c t g s : s t o p d e l u e ( TgsPid . s e n d ] ) . 1 0 ) . } = c p p t e l n e t : e x p e c t ( TgsPid . log ” . ?RCC MOS TIMEOUT } . ” a l l ” ) . C o n f i g ) . %% Get m o n i t o r f i l e name FileName = cpp tm : m o n i t o r f i l e n a m e ( [ { t g s m o n i t o r . { prompts . %% V e r i f y t r i g g e r s UeTriggersLength = p l i s t l e n g t h ( UeTriggers ) . [ g e t c o n f ( Config ) ] ) ) . %% R e s u l t from p a r s i n g l o g f i l e U e T r i g g e r s = p a r s e 3 g s i m l o g ( FileName . ct : get config ( monitor log parser ) } ] ) . UEs)++”−”++ l i s t s : nth ( 3 . short . C o n f i g ))++ ”. [ { t i m e o u t . { prompts . [ { t i m e o u t . ?CU TIMEOUT } . UEs ) . UEs ) . SCs)++” −c ∗ ” ” −tb s p i n t −mb r a n d o m c e l l s 5 s − c a p a b i l i t i e s e u l ” ” − e l a l l −ns −bn 0 0 0 0 0 4 ” . { prompts . 30) . s e n d ] ) . P a t h S h o r t = ” l o g p r i v a t e /”++ a t o m t o l i s t ( p r o p l i s t s : g e t v a l u e ( t e s t c a s e . ”rm − f / c /3 gsim / m e a s u r e m e n t d a t a / ue”++Ue++”. u n l i m i t e d } . ?CU TIMEOUT } .mob” ) end . ModuleBoards . s e n d ] ) . { ok . ”3 gsim cu − i ”++ l i s t s : nth ( 3 . u n l i m i t e d } . { ok . %% Stop and d e l e t e Ue { ok . %% Purge o l d m o b i l i t y f i l e s l i s t s : foreach ( f u n ( Ue ) −> ok = c p p t e l n e t : s e n d ( TgsPid . Ue ) end . ct : g e t c o n f i g ( cpp time server ) . send ] ) .

[ { t i m e o u t . ?CU TIMEOUT } .mob” ) end . U e T r i g g e r s ) . [ ”EXECUTED” ] . ?CU TIMEOUT } . UEs)++”. ?RCC MOS TIMEOUT } . ”3 gsim cu − i 000004 −c 1015” ” −tb c s m t − c a p a b i l i t i e s r 9 9 −ns ” . D e l a y s ) . RncPid = r c c s u p p o r t : g e t h a n d l e ( ? RCC RNC PID . { prompts . u n l i m i t e d } . [ { t i m e o u t . u n l i m i t e d } .” − ” . SCs)++” − a a c ∗ ” ” −tb s p i n t −mf ue”++ l i s t s : nth ( 3 . [ UeTriggersLength . C o n f i g ) . ”3 gsim s t a u − i a l l ” .mob” ” − c a p a b i l i t i e s e u l − e l a l l −ns ” ” −bn 0 0 0 0 0 4 ” .mob” ” − c a p a b i l i t i e s e u l − e l a l l −ns ” .” − ” } end . %% Wait b e f o r e s t a r t GetDelay = f u n ( Ue ) −> { l i s t s : nth ( l i s t t o i n t e g e r ( Ue ) . %%========================================================= %% S t a r t u e i d t r a c e on UE %%========================================================= l i s t s : foreach ( f u n ( Ue ) −> r c c t h r u n : s t a r t u e i d t r a c e ( RncPid . s e n d ] ) . cpp timer : s l e e p ( ct : g e t c o n f i g ( host ) . UeTriggers ] ) . { prompts . s e n d ] ) . 42 . { ok . UEs)++”. ”3 gsim cu − i ”++ l i s t s : nth ( 2 . c p p t e l n e t : e x p e c t ( TgsPid .c t : l o g ( y e l l o w b g . T e s t C a se = r c c s u p p o r t : g e t h a n d l e ( ?RCC TESTCASE. UEs ) . SCs . ” ue”++Ue++”. %% C r e a t e m o b i l i t y f i l e CreateMobFile = l i s t s : foreach ( f u n ( { Ue . u n l i m i t e d } . ct : g e t c o n f i g ( cpp time server ) . { ok . T r i g g e r s } ) −> u e h 3 g s i m h e l p e r : t g s c r e a t e m o b i l i t y f i l e ( TgsPid . . ?CU TIMEOUT } . ModuleBoards . [ { t i m e o u t .mob” ” − c a p a b i l i t i e s e u l − e l a l l −ns ” . c p p t e l n e t : e x p e c t ( TgsPid . [ ”EXECUTED” ] . %% Read c o n f i g p a r a m e t e r s TgsPid = r c c s u p p o r t : g e t h a n d l e ( ? RCC TGS PID . SCs)++” − a a c ∗ ” ” −tb p s i n t f a c h u r a f a c h −mf ue”++ l i s t s : nth ( 1 . s e n d ] ) . { prompts . C o n f i g ) . { prompts . s e n d ] ) . UEs)++ ” −c ”++ l i s t s : nth ( 2 . ModuleBoards = r c c s u p p o r t : g e t b o a r d s ( module . . [ GetDelay ( Ue ) | d e l a y 2 b ( T r i g g e r s ) ] . SCs)++” − a a c ∗ ” ” −tb 3 xPsIntEUL HS −mf ue”++ l i s t s : nth ( 2 . %%%=========================================================================== %% @spec t c r o b v r f ( C o n f i g 0 ) %%%=========================================================================== t c r o b v r f ( C o n f i g ) −> %% UEs { UEs . c p p t e l n e t : e x p e c t ( TgsPid . UEs)++”. [ ”EXECUTED” ] . } = g e t c o n f ( Config ) . u n l i m i t e d } . ?CU TIMEOUT } . [ ”EXECUTED” ] . [ ”EXECUTED” ] . [ { t i m e o u t . 1) . s e n d ] ) . C o n f i g ) . ” U e T r i g g e r s ( ˜ p ) : ˜p˜n ” . } = c p p t e l n e t : e x p e c t ( TgsPid . [ { t i m e o u t . Ue ) end . C o n f i g ) . ”3 gsim cu − i ”++ l i s t s : nth ( 1 . { prompts . u n l i m i t e d } . ”3 gsim cu − i ”++ l i s t s : nth ( 3 . } = c p p t e l n e t : e x p e c t ( TgsPid . UEs)++ ” −c ”++ l i s t s : nth ( 3 . UEs)++ ” −c ”++ l i s t s : nth ( 1 .

%%%=========================================================================== %% @spec t c r o b v r f p o s t c h e c k e x c e r r ( C o n f i g 0 ) %%%=========================================================================== t c r o b v r f p o s t c h e c k e x c e r r ( C o n f i g ) −> Expected =”” . %% R e s u l t from p a r s i n g l o g f i l e U e T r i g g e r s = p a r s e 3 g s i m l o g ( FileName . [ { t i m e o u t . %% Stop and d e l e t e Ue { ok . r c c p c : t g s e x c e p t i o n a n d e r r o r c h e c k ( C o n f i g . Expected ) . r c c p c : t g s e x c e p t i o n a n d e r r o r c h e c k ( C o n f i g . rcc support : g e t l o g d i r ( Config ) . [ UeTrigg ersLengt hUe . C o n f i g ) . %%%=========================================================================== %% @spec t c r o b v r f p o s t c h e c k t g s i m ( C o n f i g 0 ) %%%=========================================================================== t c r o b v r f p o s t c h e c k t g s i m ( C o n f i g ) −> Expected = ” ” . r c c p c : e x c e p t i o n a n d e r r o r c h e c k ( C o n f i g . Expected ) . %% Get m o n i t o r f i l e name FileName = cpp tm : m o n i t o r f i l e n a m e ( [ { t g s m o n i t o r . short . } = c p p t e l n e t : e x p e c t ( TgsPid . [ UeTriggersLength . UeTriggersLengthUe = p l i s t l e n g t h t r i g ( UeTriggers ) . ”3 gsim s t o u − i ”++ l i s t s : nth ( 1 . c t : l o g ( y e l l o w b g . %%% − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − %%% #6. u n l i m i t e d } . %%%=========================================================================== %% @spec t c r o b p o s t c h e c k e x c e r r ( C o n f i g 0 ) %%%=========================================================================== t c r o b p o s t c h e c k e x c e r r ( C o n f i g ) −> Expected =”” . ?STOU TIMEOUT } . ” a l l ” ) . TEST SUITE SPECIFIC FUNCTIONS 43 . %% V e r i f y e x e c u t e d t r i g g e r s UeTriggersLength = p l i s t l e n g t h ( UeTriggers ) . log ” . r c c s u p p o r t : c h e c k u e c t x t r e l e a s e ( Config . 1 0 ) . UEs)++”−”++ l i s t s : nth ( 3 . [ g e t c o n f ( Config ) ] ) ) . P a t h S h o r t = ” l o g p r i v a t e /”++ a t o m t o l i s t ( p r o p l i s t s : g e t v a l u e ( t e s t c a s e . g e t c o n f ( C o n f i g ) ] ) ) end . UeTriggers ] ) . C o n f i g ))++ ”. Expected ) . ” V e r i f i c a t i o n o f ˜n U e T r i g g e r s ( ˜ p ) : ˜p˜n ” . UEs ) . %%%=========================================================================== %% @spec t c r o b p o s t c h e c k t g s i m ( C o n f i g 0 ) %%%=========================================================================== t c r o b p o s t c h e c k t g s i m ( C o n f i g ) −> Expected = ” ” . r c c p c : e x c e p t i o n a n d e r r o r c h e c k ( C o n f i g . 30) . Expected ) . −> c t : comment ( i o l i b : f w r i t e ( ”˜p<br >˜n<a h r e f =\”˜ s \”> S h o r t l o g </a> <br >˜n˜p ” . [ ”EXECUTED” ] . TestCase . PathShort . s e n d ] ) . { prompts . ct : g e t c o n f i g ( cpp time server ) . r c c t g s : s t o p d e l u e ( TgsPid . Config . case ( UeTriggersLength ) of [ ] −> c t : comment ( i o l i b : f w r i t e ( ”< f o n t c o l o r =\” g o l d \”>NO TRAFFIC</f o n t > <br >˜n˜p ” . ct : get config ( monitor log parser ) } ] ) .%% S l e e p 30 s cpp timer : s l e e p ( ct : g e t c o n f i g ( host ) .

{ 2 3 } ) \ \ ] . %% V e r i f y c a p t u r e s c t : l o g ( y e l l o w b g . ”NO TRAFFIC ” ) . ” Matches ( ˜ p ) : ˜p˜n ” .M. [ l e n g t h ( Matches ) . [ Year .%%% − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − %% P a r s e 3 gsim l o g f i l e t o m o b i l i t y p a r s e 3 g s i m l o g ( F i l e . t i m e d i f f t u p l e ( Ev ents ) } end . U. C++” e c n o ” . [ ˆ . M} −> Matches = M. { Ue . B . = ] + ? = ( \ \ d ++))?” .W1} | t i m e d i f f t u p l e (Rem ) ] . l o g t i m e t o u n i x t i m e (H) . M a t c h e s I n t = [ l i s t t o i n t e g e r (M) | | M <− Matches ] . −> ok end . c a s e r e : run ( Data . [ { capture . { match . C o n f i g ) −> file format %% Read f i l e { ok . D. %% S o r t o u t ( d i s t i n c t ) UEs AllUEs = [ Ue | | [ | [ Ue | ] ] <− Matches ] .W1] | [ [ X2 . Month . [ { capture . l i s t } . a l l b u t f i r s t . Matches ] ) . H ==Ue ] . B . 7 4 8 l o g t i m e t o u n i x t i m e ( Logtime ) −> P a t t e r n = ” ( \ \ d { 4 } ) − ( \ d { 2 } ) − ( \ d { 2 } ) ” ”(\d { 2 } ) : ( \ \ d { 2 } ) : ( \ \ d {2})\. P a t t e r n . %% Match e l e m e n t p o s i t i o n s & c o n v e r t t o u n i x timestamp UeEvents = [ [ U. Msec ] = M a t c h e sI n t . Data } = f i l e : r e a d f i l e ( F i l e ) .W} ] . ] | ]=Rem ] ) −> [ { i n t e g e r t o l i s t ( round ( ( X2−X1 ) ∗ 1 0 0 0 ) ) . l i s t } ] ) .M] | | [ H. V1 . UEs ) . 44 . + ?UE: ( \ \ d++). global ]) of %% E x i t i f no match c a s e l e n g t h ( Matches ) o f 0 −> %c t : comment(” < f o n t c o l o r =\” g o l d \”>NO TRAFFIC</f o n t > ”) . T ] <− U e A c t i o n s ] . all but first . B . Min . t i m e d i f f t u p l e ( [ [ . Data ) . 7 4 8 −> 4 3 4 5 8 6 4 5 4 2 3 4 . = ] + ? = ( \ \ d + + ) ) ? ( ? : . T. . C ] ) −> [ A.+? e v e n t =( \ d \w) ” ” ( ? : . UEs = l i s t s : u s o r t ( AllUEs ) . Matches } = r e : run ( Logtime . % 1C ( [ A.(\ d {3})” . { match . %% C a l c u l a t e t i m e d i f f e r e n c e o f t u p l e e l e m e n t s i n l i s t ( i n ms ) t i m e d i f f t u p l e ( [ [ X1 .V. C. %% Reformat t o t u p l e and c a l c u l a t e t i m e d i f f U e T r i g g e r s = l i s t s : map( f u n ( Ue ) −> Even ts = [ T | | [ H | T ] <− UeEvents . Matches ) . C o n f i g . P a t t e r n . nomatch −> Matches = [ ] end . V1 . V.D++”−”++E ] . t i m e d i f f t u p l e ( [ ] ) −> []. % 2D & 2F e v e n t s (A) −> A end . [ ˆ . Day . B .W] ] ) −> [ { i n t e g e r t o l i s t ( 1 0 0 0 0 0 ) . Sec . %% P r i n t l o g l i n k s p r i n t l o g l i n k s ( F i l e . Hour . %% C o n v e r t s l o g t i m e t o u n i x t i m e : 2011 − 02 − 01 0 3 : 4 8 : 0 0 . c t : p a l ( e r r o r . %% Fix f o r m a t f o r e v e n t s U e A c t i o n s = l i s t s : map( f u n ( [ A. ” − ” ] . %% P i c k e v e n t s P a t t e r n = ” \ \ [ ( . E ] ) −> [ A. C.

) −> []. ” l o g p r i v a t e /”++ F i l e S h o r t . F i l e ] ) . ” 2D”=C1 } | [ { A2 . ” t g s m o n i t o r SHORT ( ˜ p ) l o g l i n k ˜n <a h r e f =\”˜ s \” >˜s </a >˜n ” . L i n e s ) . { Ue . Cap end . 3)++”. r e l t i m e ( [ ] ) −> []. C o n f i g . A2i = i n t e g e r t o l i s t ( l i s t t o i n t e g e r ( A2) − 50) . l i s t } . %% Reformat l o g l i n e s r e f o r m a t l o g l i n e s ( L i n e s ) −> P a t t e r n = ” \ \ [ ( . [ { capture . + ” . C2 } | d e l a y 2 b (Rem ) ] ] . [ ” l o g p r i v a t e /”++ f i l e n a m e : basename ( F i l e ) . ” .calendar : datetime to gregorian seconds ( {{ Year . P a t t e r n = ” . L i n e s R e f o r m a t = l i s t s : map( f u n ( L i n e ) −> { match . r e l t i m e ( [ [ T1 | R ] | Rem ] . ” ” ) | r e l t i m e (Rem. P a t t e r n . c a s e r e : run ( Data . Mat = 0 end . { Hour . + ( M o b i l i t y Ind | t a r g e t RAB s t a t e | e v e n t = | f r o z e n ) . %% S o r t o u t ( d i s t i n c t ) UEs AllUEs = [ Ue | | [ | [ Ue | ] ] <− L i n e s R e f o r m a t ] . B2 . l e n g t h ( Tf ) − 5 . i o l i b : f w r i t e ( ” ˜w˜n˜p˜n ” . T0 ) ] . Month . g l o b a l ] ) o f { match . nomatch −> DataShort = [ ] . d e l a y 2 b ( [ T | Rem ] ) −> 45 . Day } . Cap } = r e : run ( Line . B1 . [ { A1i . log ” . [ s t r 2 i n t ( g e t c o n f ( C o n f i g ) ) . f i l e : w r i t e f i l e ( D i r S h o r t++F i l e S h o r t . L i n e s } −> DataShort = r e f o r m a t l o g l i n e s ( L i n e s ) . C1 } | [ { A2i . ” ” ) | r e l t i m e (Rem. D i r S h o r t++F i l e S h o r t ] ) . a l l b u t f i r s t . DirShort = p r o p l i s t s : g e t v a l u e ( p r i v d i r . %% Add 50 ms t o 2B e v e n t s & s u b t r a c t 50 ms from t h e f o l l o w i n g e v e n t s d e l a y 2 b ( [ { A1 . Data ) −> c t : l o g ( b l u e b g . l e n g t h ( Tf ) − 2) . 0 0 0 ” |R] . F i l e S h o r t = a t o m t o l i s t ( p r o p l i s t s : g e t v a l u e ( t e s t c a s e . r e l t i m e ( L i s t ) } end .”++ s t r i n g : s u b s t r ( Tf . [ { c a p t u r e . [ Mat . P a t t e r n . +UE: ( \ \ d { 6 } ) : ( . UEs ) . [ s t r i n g : j o i n ( [ T|R] . rel time ([] . C2 } | Rem ] ] ) −> A1i = i n t e g e r t o l i s t ( l i s t t o i n t e g e r ( A1) + 5 0 ) . ” t g s m o n i t o r l o g l i n k ˜n <a h r e f =\”˜ s \” >˜s </a >˜n ” . l i s t }]) . %% C a l c u l a t e t i m e d i f f e r e n c e r e l a t i v e t o t h e f i r s t l i s t e l e m e n t r e l t i m e ( [ [ T0 | R ] | Rem ] ) −> [ s t r i n g : j o i n ( [ ” 0 0 0 . T = s t r i n g : s u b s t r ( Tf . %% P r i n t l o g l i n k s & g e n e r a t e s h o r t l o g p r i n t l o g l i n k s ( F i l e . f i r s t . + ) . ct : log ( blue bg . short . C o n f i g ))++ ”. S e c } } ) − 6 2 1 6 7 2 1 9 2 0 0 + Msec / 1 0 0 0 . Min . %% S o r t by UE & Show r e l a t i v e t i m e l i s t s : map( f u n ( Ue ) −> L i s t = [ [ l o g t i m e t o u n i x t i m e (T ) | A ] | | [ T | [ U | A ] ] <− LinesReformat . B2 . Config ) . T0 ) ] . B1 . { 2 3 } ) \ \ ] . U ==Ue ] . DataShort ] ) ) . T0 ) −> Tf = ”000000”++ i n t e g e r t o l i s t ( round ( 1 0 0 0 ∗ ( T1−T0 ) ) ) . Mat = l e n g t h ( L i n e s ) . UEs = l i s t s : u s o r t ( AllUEs ) .

” 3 0 0 0 ” . { tb . Conf ) .”4260”] .N ) ) . ” 0 0 0 0 0 2 ” . %% C o n v e r t s a l i s t o f s t r i n g s t o i n t e g e r s s t r 2 i n t ( [ Elem | ]= I n t ) when i s i n t e g e r ( Elem ) −> l i s t t o i n t e g e r ( Int ) . {mb. 2 } . s t r 2 i n t ( Tuple ) when i s t u p l e ( Tuple ) −> s t r 2 i n t ( t u p l e t o l i s t ( Tuple ) ) . %% Get l e n g t h o f t r i g g e r s p r o p l i s t p l i s t l e n g t h t r i g ( P l i s t ) −> l i s t s : map( f u n ( { K. l i s t s : s e q ( 1 . g e t c o n f ( Ue . %% Get c o n f i g u r a t i o n p a r a m e t e r s g e t c o n f ( C o n f i g ) −> p r o p l i s t s : g e t v a l u e ( conf . 3 ) ) . H. l i s t s : nth ( TypesIndex . C o n f i g ) when i s a t o m ( Type ) −> Conf = t u p l e t o l i s t ( g e t c o n f ( C o n f i g ) ) . l i s t s : nth ( Ue . { UEs . Plist ). MT) . p l i s t l e n g t h ( [ ] ) −> [].23 . %3 . C o n f i g ) when i s i n t e g e r ( Ue ) −> M = t u p l e t o l i s t ( g e t c o n f ( Config ) ) . l e n g t h (V) } end . 4 } .14 . g e t c o n f ( Type . ” 0 0 0 0 0 3 ” ] . Config ) .5 %11 . ” 2 0 0 0 ” ] . SCs . TBs . %% C o n v e r t s a l i s t o f i n t e g e r s t o s t r i n g s i n t 2 s t r ( L i s t ) −> l i s t s : map( f u n ( Elem ) −> i n t e g e r t o l i s t ( Elem ) end . 3 } . %% End o f t e s t s u i t e %%%=========================================================================== 46 . Types = [ { ue . List ).”3240” . { d e l a y . %% Get l e n g t h o f p r o p l i s t p l i s t l e n g t h ( [ { . l i s t s : map( f u n ( ) −> L+random : u n i f o r m (H −L ) end . TypesIndex = p r o p l i s t s : g e t v a l u e ( Type . 1 } . Types ) . MBs. %% G e n e r a t e a l i s t o f random i n t e g e r s rand ( L . ” 4 0 0 0 ” . { s c . SCs = i n t 2 s t r ( rand ( 1 0 1 3 .7 .24 TBs = [ ” 4 0 0 0 ” . MBs = [ ” 3 0 0 0 ” . %1013 − 1024 %13 . 1 0 2 4 . ” 5 0 0 0 ” ] .15 %14 . N) −> random : s e e d ( now ( ) ) . d e l a y 2 b ( [ ] ) −> []. s t r 2 i n t ( [ ] ) −> []. %% G e n e r a t e random c o n f i g r a n d o m c o n f ( ) −> UEs = [ ” 0 0 0 0 0 1 ” .[ T | d e l a y 2 b (Rem ) ] . D e l a y s } .9 Delays = [”2250” . MT = e d o c l i b : t r a n s p o s e (M) . V } ) −> {K. V } | Rem ] ) −> [ l e n g t h (V) | p l i s t l e n g t h (Rem ) ] .4 . s t r 2 i n t ( [ Elem | Rem ] ) when i s l i s t ( Elem ) −> [ s t r 2 i n t ( Elem ) | s t r 2 i n t (Rem ) ] . 5 } ] .