| /* Copyright (c) 2000-2019 Ericsson Telecom AB |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v2.0 |
| * which accompanies this distribution, and is available at |
| * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html |
| * |
| * Contributors: |
| * Michael Josenhans |
| ******************************************************************************/ |
| // |
| // File: SocketCAN_J1939_test.ttcn |
| // Description: SocketCAN J1939 testcases for J1939 messages |
| // |
| |
| |
| |
| module SocketCAN_J1939_test |
| { |
| import from J1939 all |
| import from J1939test all |
| |
| function create_octetstring_of_size(in integer size) return octetstring { |
| |
| var octetstring v_pdu_mod_1024 := ''O |
| var octetstring v_pdu_1024 := ''O |
| var octetstring v_pdu_mod_1048576 := ''O //1024*1024 |
| var octetstring v_pdu_1048576 := ''O |
| var octetstring v_pdu_1073741824 := ''O //1024*1024*1024 |
| var octetstring v_pdu := ''O |
| |
| var integer vcount :=0 |
| var integer maxcount |
| maxcount := size mod 1024 |
| for (vcount :=0;vcount < maxcount; vcount := vcount+1){ |
| v_pdu_mod_1024 := v_pdu_mod_1024 & int2oct((vcount mod 256),1) |
| } |
| |
| log("1") |
| for (vcount :=0;vcount < 1024; vcount := vcount+1){ |
| v_pdu_1024 := v_pdu_1024 & int2oct((vcount mod 256),1) |
| } |
| log("2") |
| maxcount := (size /1024) mod 1024 |
| for (vcount :=0;vcount < maxcount; vcount := vcount+1){ |
| v_pdu_mod_1048576 := v_pdu_mod_1048576 & v_pdu_1024 |
| } |
| v_pdu_mod_1048576 := v_pdu_mod_1048576 & v_pdu_mod_1024 |
| log("3") |
| for (vcount :=0;vcount < 1024; vcount := vcount+1){ |
| v_pdu_1048576 := v_pdu_1048576 & v_pdu_1024 |
| } |
| log("4") |
| maxcount := (size / (1024*1024)) |
| for (vcount :=0;vcount < maxcount; vcount := vcount+1){ |
| v_pdu_1073741824 := v_pdu_1073741824 & v_pdu_1048576 |
| } |
| v_pdu_1073741824 := v_pdu_1073741824 & v_pdu_mod_1048576 |
| log("5") |
| |
| v_pdu := v_pdu_1073741824 |
| |
| return v_pdu |
| } |
| |
| testcase tc_can_j1939_send_and_receive_can_frame() runs on MTC { |
| var PTC v_ptc_j1939SendInitiator := PTC.create("PTC1_ptc_j1939SendInitiator") alive |
| var PTC v_ptc_j1939FrameReceiver := PTC.create("PTC2_ptc_j1939FrameReceiver") alive |
| |
| f_addSyncSlaveSet(v_ptc_j1939SendInitiator, v_PTCSet) |
| f_addSyncSlaveSet(v_ptc_j1939FrameReceiver, v_PTCSet) |
| |
| connect(mtc:pt_sync, v_ptc_j1939SendInitiator:pt_sync) |
| connect(mtc:pt_sync, v_ptc_j1939FrameReceiver:pt_sync) |
| |
| const integer c_send_prio := 2 |
| const octetstring c_addr_source1 := '80'O |
| const octetstring c_pgn_destination1 := '00E700'O // ECU to VT |
| const octetstring c_addr_destination1 := '90'O |
| |
| |
| |
| var octetstring v_pdu_send := ''O |
| //v_pdu_send := create_octetstring_of_size(117440505) |
| |
| v_pdu_send := create_octetstring_of_size (4193975) //4193976 |
| |
| log("length of v_pdu_send: ", lengthof(v_pdu_send)) |
| |
| v_ptc_j1939SendInitiator.start(f_ptc_J1939SendInitiator( |
| e_testbody1, |
| c_send_prio, |
| c_addr_source1, |
| c_pgn_destination1, |
| c_addr_destination1, |
| v_pdu_send)) |
| |
| v_ptc_j1939FrameReceiver.start(f_ptc_J1939FrameReceiver( |
| e_testbody2, |
| c_addr_destination1, /* p_j1939_addr_source */ |
| c_pgn_destination1, /* p_peer_pgn */ |
| c_addr_source1, /* p_peer_addr */ |
| J1939_NO_NAME, /* p_peer_name */ |
| v_pdu_send /* p_j1939_pdu_expected */)) |
| |
| var e_Phase v_phase |
| |
| for(v_phase := c_firstPhase; v_phase < e_testcase_complete;v_phase := f_incMTCPhase(v_phase)) { |
| f_startPhase(v_phase) |
| log("MTC: ", v_phase) |
| f_awaitEndPhase(v_phase) |
| } |
| |
| all component.done; |
| log("MTC done") |
| |
| disconnect(mtc:pt_sync, v_ptc_j1939SendInitiator:pt_sync) |
| disconnect(mtc:pt_sync, v_ptc_j1939FrameReceiver:pt_sync) |
| |
| all component.kill; |
| } |
| |
| testcase tc_can_j1939_send_and_receive_can_frame_parallel() runs on MTC { |
| var PTC v_ptc_j1939SendInitiator1 := PTC.create("PTC1_ptc_j1939SendInitiator1") alive |
| var PTC v_ptc_j1939FrameReceiver1 := PTC.create("PTC2_ptc_j1939FrameReceiver1") alive |
| var PTC v_ptc_j1939SendInitiator2 := PTC.create("PTC1_ptc_j1939SendInitiator2") alive |
| var PTC v_ptc_j1939FrameReceiver2 := PTC.create("PTC2_ptc_j1939FrameReceiver2") alive |
| f_addSyncSlaveSet(v_ptc_j1939SendInitiator1, v_PTCSet) |
| f_addSyncSlaveSet(v_ptc_j1939FrameReceiver1, v_PTCSet) |
| f_addSyncSlaveSet(v_ptc_j1939SendInitiator2, v_PTCSet) |
| f_addSyncSlaveSet(v_ptc_j1939FrameReceiver2, v_PTCSet) |
| connect(mtc:pt_sync, v_ptc_j1939SendInitiator1:pt_sync) |
| connect(mtc:pt_sync, v_ptc_j1939FrameReceiver1:pt_sync) |
| connect(mtc:pt_sync, v_ptc_j1939SendInitiator2:pt_sync) |
| connect(mtc:pt_sync, v_ptc_j1939FrameReceiver2:pt_sync) |
| |
| const integer c_send_prio := 2 |
| const octetstring c_addr_source1 := '80'O |
| const octetstring c_pgn_destination1 := '00E700'O // ECU to VT |
| const octetstring c_addr_destination1 := '90'O |
| const octetstring c_addr_source2 := '80'O |
| const octetstring c_pgn_destination2 := '00E700'O // ECU to VT |
| const octetstring c_addr_destination2 := '91'O |
| |
| var octetstring v_pdu_send1 := ''O |
| var octetstring v_pdu_send2 := ''O |
| //v_pdu_send := create_octetstring_of_size(117440505) |
| v_pdu_send1 := create_octetstring_of_size(4193976) |
| log("length of v_pdu_send1: ", lengthof(v_pdu_send1)) |
| v_pdu_send2 := create_octetstring_of_size(4193976) |
| log("length of v_pdu_send2: ", lengthof(v_pdu_send2)) |
| |
| v_ptc_j1939SendInitiator1.start(f_ptc_J1939SendInitiator( |
| e_testbody1, |
| c_send_prio, |
| c_addr_source1, |
| c_pgn_destination1, |
| c_addr_destination1, |
| v_pdu_send1)) |
| |
| v_ptc_j1939FrameReceiver1.start(f_ptc_J1939FrameReceiver( |
| e_testbody2, |
| c_addr_destination1, /* p_j1939_addr_source */ |
| c_pgn_destination1, /* p_peer_pgn */ |
| c_addr_source1, /* p_peer_addr */ |
| J1939_NO_NAME, /* p_peer_name */ |
| v_pdu_send1 /* p_j1939_pdu_expected */)) |
| |
| v_ptc_j1939SendInitiator2.start(f_ptc_J1939SendInitiator( |
| e_testbody1, |
| c_send_prio, |
| c_addr_source2, |
| c_pgn_destination2, |
| c_addr_destination2, |
| v_pdu_send2)) |
| |
| v_ptc_j1939FrameReceiver2.start(f_ptc_J1939FrameReceiver( |
| e_testbody2, |
| c_addr_destination2, /* p_j1939_addr_source */ |
| c_pgn_destination2, /* p_peer_pgn */ |
| c_addr_source2, /* p_peer_addr */ |
| J1939_NO_NAME, /* p_peer_name */ |
| v_pdu_send2 /* p_j1939_pdu_expected */)) |
| |
| var e_Phase v_phase |
| |
| for(v_phase := c_firstPhase; v_phase < e_testcase_complete;v_phase := f_incMTCPhase(v_phase)) { |
| f_startPhase(v_phase) |
| log("MTC: ", v_phase) |
| f_awaitEndPhase(v_phase) |
| } |
| all component.done; |
| log("MTC done") |
| |
| disconnect(mtc:pt_sync, v_ptc_j1939SendInitiator1:pt_sync) |
| disconnect(mtc:pt_sync, v_ptc_j1939FrameReceiver1:pt_sync) |
| disconnect(mtc:pt_sync, v_ptc_j1939SendInitiator2:pt_sync) |
| disconnect(mtc:pt_sync, v_ptc_j1939FrameReceiver2:pt_sync) |
| all component.kill; |
| } |
| |
| testcase tc_can_f_j1939_address_claim() runs on MTC { |
| var PTC v_ptc_j1939AddressClaimInitiator := PTC.create("PTC1_ptc_j1939AddressClaimInitiator") alive |
| |
| f_addSyncSlaveSet(v_ptc_j1939AddressClaimInitiator, v_PTCSet) |
| |
| connect(mtc:pt_sync, v_ptc_j1939AddressClaimInitiator:pt_sync) |
| |
| const J1939_NAME c_j1939_name_source := '1122334455667788'O |
| |
| v_ptc_j1939AddressClaimInitiator.start(f_j1939_address_claim( |
| e_testbody1, |
| c_j1939_name_source)) |
| |
| var e_Phase v_phase |
| |
| for(v_phase := c_firstPhase; v_phase < e_testcase_complete;v_phase := f_incMTCPhase(v_phase)) { |
| f_startPhase(v_phase) |
| log("MTC: ", v_phase) |
| f_awaitEndPhase(v_phase) |
| } |
| |
| all component.done; |
| log("MTC done") |
| |
| disconnect(mtc:pt_sync, v_ptc_j1939AddressClaimInitiator:pt_sync) |
| |
| |
| all component.kill; |
| } |
| |
| testcase tc_can_f_j1939_address_claim2() runs on MTC { |
| var PTC v_ptc_j1939AddressClaimInitiator := PTC.create("PTC1_ptc_j1939AddressClaimInitiator") alive |
| |
| f_addSyncSlaveSet(v_ptc_j1939AddressClaimInitiator, v_PTCSet) |
| |
| connect(mtc:pt_sync, v_ptc_j1939AddressClaimInitiator:pt_sync) |
| |
| const J1939_NAME c_j1939_name_source := '1122334455667788'O |
| const octetstring c_j1939_pdu_send := '00EE00'O |
| |
| v_ptc_j1939AddressClaimInitiator.start(f_j1939_address_claim2( |
| e_testbody1, |
| c_j1939_name_source, |
| c_j1939_pdu_send)) |
| |
| var e_Phase v_phase |
| |
| for(v_phase := c_firstPhase; v_phase < e_testcase_complete;v_phase := f_incMTCPhase(v_phase)) { |
| f_startPhase(v_phase) |
| log("MTC: ", v_phase) |
| f_awaitEndPhase(v_phase) |
| } |
| |
| all component.done; |
| log("MTC done") |
| |
| disconnect(mtc:pt_sync, v_ptc_j1939AddressClaimInitiator:pt_sync) |
| |
| |
| all component.kill; |
| } |
| |
| //========================================================================= |
| // Control |
| //========================================================================= |
| |
| // Insert control part here if applicable! |
| |
| } // end of module |