m3ua-testtool/m3ua-sgp-tests.scm

1252 lines
61 KiB
Scheme

;;;
;;; Copyright (C) 2004, 2005, 2006 M. Tuexen tuexen@fh-muenster.de
;;;
;;; All rights reserved.
;;;
;;; Redistribution and use in source and binary forms, with or
;;; without modification, are permitted provided that the
;;; following conditions are met:
;;; 1. Redistributions of source code must retain the above
;;; copyright notice, this list of conditions and the
;;; following disclaimer.
;;; 2. Redistributions in binary form must reproduce the
;;; above copyright notice, this list of conditions and
;;; the following disclaimer in the documentation and/or
;;; other materials provided with the distribution.
;;; 3. Neither the name of the project nor the names of
;;; its contributors may be used to endorse or promote
;;; products derived from this software without specific
;;; prior written permission.
;;;
;;; THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS
;;; ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
;;; BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
;;; MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
;;; DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS
;;; BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
;;; EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
;;; LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
;;; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
;;; HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
;;; IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
;;; USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
;;; OF SUCH DAMAGE.
;;; $Id: m3ua-sgp-tests.scm,v 1.9 2012/08/28 19:56:13 tuexen Exp $
;;; Version 1.3.0
;;;
;;; History
;;; 04.12.2004: Fix name test-addr- -> tester-addr in almost all testcases
;;; 04.12.2004: Fix name of m3ua-sgp-mtr-v-001 to m3ua-sgp-mtr-v-002.
;;; 06.12.2004: Move SUT parameter to external file.
;;; 06.12.2004: Use asp-up-message-parameters as default last arg of m3ua-make-asp-up-message.
;;; 06.12.2004: Use asp-active-message-parameters as default last arg of m3ua-make-asp-active-message.
;;; 06.12.2004: Use asp-active-ack-message-parameters as default last arg of m3ua-make-asp-active-ack-message.
;;; 06.12.2004: Use asp-inactive-message-parameters as default last arg of m3ua-make-asp-inactxive-message.
;;; 06.12.2004: Use asp-inactive-ack-message-parameters as default last arg of m3ua-make-asp-inactive-ack-message.
;;; 06.12.2004: Use data-message-parameters as default last arg of m3ua-make-data-message.
;;; 09.12.2004: m3ua-sgp-mtr-v-00[23] implemented according to change request.
;;; 14.12.2004: m3ua-sgp-aspsm-v-009 added.
;;; 14.12.2004: m3ua-sgp-asptm-i-003 added.
;;; 18.12.2004: Use iut-ni iut-mp and iut-sls in m3ua-make-data-message.
;;; 19.12.2004: m3ua-sgp-asptm-v-014 added.
;;; 19.12.2004: m3ua-sgp-asptm-v-015 added.
;;; 19.12.2004: m3ua-sgp-asptm-i-009 added.
;;; 19.12.2004: m3ua-sgp-mtr-v-001 added.
;;; 19.12.2004: m3ua-sgp-mtr-v-002 additional variant added.
;;; 19.12.2004: m3ua-sgp-mtr-v-003 additional variant added.
;;; 13.09.2005: Implement ASP tests.
;;; 18.02.2006: Implement m3ua-sgp-rkm*
;;; 12.03.2006: Fix name of m3ua-sgp-rkm-v-02[123] to m3ua-sgp-rkm-i-02[123]
;;; 27.08.2006: m3ua-sgp-mtr-v-00[12]: do not send data before reception of DAVA. Should I send DAUD?
;;;
;;; Definition of the tests for the SGP
;;;
(define (m3ua-sgp-aspsm-v-001 tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(close fd)
m3ua-test-result-passed))
;;; (m3ua-sgp-aspsm-v-001 tester-addr tester-port sut-addr sut-port)
;;; The test is passed if an ASPUP-ACK is returned
(define (m3ua-sgp-aspsm-v-003 tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(let ((msg (m3ua-wait-for-message fd m3ua-notify-message?)))
(close fd)
(if (and (= (m3ua-get-status-type-from-message msg) m3ua-as-state-change-status-type)
(= (m3ua-get-status-info-from-message msg) m3ua-as-inactive))
m3ua-test-result-passed
m3ua-test-result-failed))))
;;; (m3ua-sgp-aspsm-v-003 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if there is a ASPUP-ACK and a NOTIFY(AS_INACTIVE)
(define (m3ua-sgp-aspsm-v-005 tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(m3ua-send-message fd 0 (m3ua-make-asp-down-message))
(m3ua-wait-for-message fd m3ua-asp-down-ack-message?)
(close fd)
m3ua-test-result-passed))
;;; (m3ua-sgp-aspsm-v-005 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if there is a ASPDN-ACK
(define (m3ua-sgp-aspsm-v-009 tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(let ((msg (m3ua-wait-for-message fd m3ua-error-message?)))
(close fd)
(if (= (m3ua-get-error-code-from-message msg)
m3ua-refused-management-blocking-error-code)
m3ua-test-result-passed
m3ua-test-result-failed))))
;;; (m3ua-sgp-aspsm-v-009 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if there is an ERROR(Refused - Management Blocking)
;;; is returned. Of course, the ASP has to be configured appropiately at the SUT.
(define (m3ua-sgp-aspsm-i-001 tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-common-header (+ m3ua-version 1)
m3ua-reserved
m3ua-aspsm-message-class
m3ua-aspup-message-type
m3ua-common-header-length))
(let ((msg (m3ua-wait-for-message fd m3ua-error-message?)))
(close fd)
(if (= (m3ua-get-error-code-from-message msg)
m3ua-invalid-version-error-code)
m3ua-test-result-passed
m3ua-test-result-failed))))
;;; (m3ua-sgp-aspsm-i-001 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if there is a ERROR(invalid version)
(define (m3ua-sgp-aspsm-i-002 tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-common-header m3ua-version
m3ua-reserved
m3ua-aspsm-message-class
m3ua-reserved-aspsm-message-type
m3ua-common-header-length))
(let ((msg (m3ua-wait-for-message fd m3ua-error-message?)))
(close fd)
(if (= (m3ua-get-error-code-from-message msg)
m3ua-unsupported-message-type-error-code)
m3ua-test-result-passed
m3ua-test-result-failed))))
;;; (m3ua-sgp-aspsm-i-002 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if there is a ERROR(unsupported message type)
(define (m3ua-sgp-aspsm-i-003 tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-active-message asp-active-message-parameters))
(let ((msg (m3ua-wait-for-message fd m3ua-error-message?)))
(close fd)
(if (= (m3ua-get-error-code-from-message msg)
m3ua-unexpected-message-error-code)
m3ua-test-result-passed
m3ua-test-result-failed))))
;;; (m3ua-sgp-aspsm-i-003 tester-addr tester-port sut-addr sut-port)
;;; This test needs clarification. FIXME.
(define (m3ua-sgp-aspsm-i-004 tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(m3ua-send-message fd 0 (m3ua-make-common-header m3ua-version
m3ua-reserved
m3ua-aspsm-message-class
m3ua-reserved-aspsm-message-type
m3ua-common-header-length))
(let ((msg (m3ua-wait-for-message fd m3ua-error-message?)))
(close fd)
(if (= (m3ua-get-error-code-from-message msg)
m3ua-unsupported-message-type-error-code)
m3ua-test-result-passed
m3ua-test-result-failed))))
;;; (m3ua-sgp-aspsm-i-004 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if there is an ERROR(unsupported message type)
(define (m3ua-sgp-aspsm-o-001 tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(close fd)
m3ua-test-result-passed))
;;; (m3ua-sgp-aspsm-o-001 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if there is an ASPUP-ACK.
(define (m3ua-sgp-aspsm-o-003 tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(m3ua-send-message fd 0 (m3ua-make-asp-active-message asp-active-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-active-ack-message?)
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(let ((msg (m3ua-wait-for-message fd m3ua-error-message?)))
(if (= (m3ua-get-error-code-from-message msg)
m3ua-unexpected-message-error-code)
(begin
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(let ((msg (m3ua-wait-for-message fd m3ua-notify-message?)))
(close fd)
(if (and (= (m3ua-get-status-type-from-message msg) m3ua-as-state-change-status-type)
(= (m3ua-get-status-info-from-message msg) m3ua-as-inactive))
m3ua-test-result-passed
m3ua-test-result-failed)))
(begin
(close fd)
m3ua-test-result-failed)))))
;;; (m3ua-sgp-aspsm-o-003 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if there is an ERROR(unexpected message),
;;; an ASPUP-ACK and a NOTIFY(AS_INACTIVE).
(define (m3ua-sgp-aspsm-o-004 tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-down-message))
(m3ua-wait-for-message fd m3ua-asp-down-ack-message?)
(close fd)
m3ua-test-result-passed))
;;; (m3ua-sgp-aspsm-o-004 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if there is an ASPDN-ACK,
(define (m3ua-sgp-asptm-v-001 tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(m3ua-send-message fd 0 (m3ua-make-asp-active-message asp-active-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-active-ack-message?)
(close fd)
m3ua-test-result-passed))
;;; (m3ua-sgp-asptm-v-001 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if there is an ASPAC-ACK.
(define (m3ua-sgp-asptm-v-003 tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(m3ua-send-message fd 0 (m3ua-make-asp-active-message asp-active-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-active-ack-message?)
(let ((msg (m3ua-wait-for-message fd m3ua-notify-message?)))
(close fd)
(if (and (= (m3ua-get-status-type-from-message msg) m3ua-as-state-change-status-type)
(= (m3ua-get-status-info-from-message msg) m3ua-as-active))
m3ua-test-result-passed
m3ua-test-result-failed))))
;;; (m3ua-sgp-asptm-v-003 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if there is an ASPAC-ACK and NOTIFY(AS-ACTIVE).
(define (m3ua-sgp-asptm-v-005 tester-addr tester-port sut-addr sut-port rc)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(m3ua-send-message fd 0 (m3ua-make-asp-active-message (list (m3ua-make-routing-context-parameter (list rc)))))
(m3ua-wait-for-message fd m3ua-asp-active-ack-message?)
(close fd)
m3ua-test-result-unknown))
;;; (m3ua-sgp-asptm-v-005 tester-addr tester-port sut-addr sut-port tester-rc-valid)
;;; This test is passed if there is an ASPAC-ACK contains the RC.
;;; NOTE: This test does not use the asp-active-message-parameters variable.
(define (m3ua-sgp-asptm-v-006 tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(m3ua-send-message fd 0 (m3ua-make-asp-active-message asp-active-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-active-ack-message?)
(m3ua-send-message fd 0 (m3ua-make-asp-inactive-message asp-inactive-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-inactive-ack-message?)
(close fd)
m3ua-test-result-passed))
;;; (m3ua-sgp-asptm-v-006 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if there is an ASPIA-ACK.
(define (m3ua-sgp-asptm-v-008 tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(m3ua-send-message fd 0 (m3ua-make-asp-active-message asp-active-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-active-ack-message?)
(m3ua-send-message fd 0 (m3ua-make-asp-inactive-message asp-inactive-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-inactive-ack-message?)
(let ((msg (m3ua-wait-for-message fd m3ua-notify-message?)))
(close fd)
(if (and (= (m3ua-get-status-type-from-message msg) m3ua-as-state-change-status-type)
(= (m3ua-get-status-info-from-message msg) m3ua-as-pending))
m3ua-test-result-passed
m3ua-test-result-failed))))
;;; (m3ua-sgp-asptm-v-008 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if there is an ASPIA-ACK and NOTIFY(AS-PENDING).
(define (m3ua-sgp-asptm-v-010 tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(m3ua-send-message fd 0 (m3ua-make-asp-active-message asp-active-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-active-ack-message?)
(m3ua-send-message fd 0 (m3ua-make-beat-message (string->bytes "M3UA rocks")))
(m3ua-wait-for-message fd m3ua-beat-ack-message?)
(close fd)
m3ua-test-result-passed))
;;; (m3ua-sgp-asptm-v-010 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if there is a BEAT-ACK.
(define (m3ua-sgp-asptm-v-011 tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(m3ua-send-message fd 0 (m3ua-make-asp-active-message asp-active-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-active-ack-message?)
(let ((value (random-bytes 13)))
(m3ua-send-message fd 0 (m3ua-make-beat-message value))
(let ((msg (m3ua-wait-for-message fd m3ua-beat-ack-message?)))
(close fd)
(if (equal? msg (m3ua-make-beat-ack-message value))
m3ua-test-result-passed
m3ua-test-result-failed)))))
;;; (m3ua-sgp-asptm-v-011 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if there is a BEAT-ACK with unchanged data.
(define (m3ua-sgp-asptm-v-013 tester-addr tester-port-1 tester-port-2 sut-addr sut-port-1 sut-port-2 asp-id-1 asp-id-2)
(let ((fd1 (m3ua-connect tester-addr tester-port-1 sut-addr sut-port-1))
(fd2 (m3ua-connect tester-addr tester-port-2 sut-addr sut-port-2)))
;;; Move ASP1 to ASP-ACTIVE
(m3ua-send-message fd1 0 (m3ua-make-asp-up-message (list (m3ua-make-asp-id-parameter asp-id-1))))
(m3ua-wait-for-message fd1 m3ua-asp-up-ack-message?)
(m3ua-send-message fd1 0 (m3ua-make-asp-active-message (list (m3ua-make-traffic-mode-type-parameter m3ua-traffic-mode-type-broadcast))))
(m3ua-wait-for-message fd1 m3ua-asp-active-ack-message?)
;;; Move ASP2 to ASP-ACTIVE
(m3ua-send-message fd2 0 (m3ua-make-asp-up-message (list (m3ua-make-asp-id-parameter asp-id-2))))
(m3ua-wait-for-message fd2 m3ua-asp-up-ack-message?)
(m3ua-send-message fd2 0 (m3ua-make-asp-active-message (list (m3ua-make-traffic-mode-type-parameter m3ua-traffic-mode-type-broadcast))))
(m3ua-wait-for-message fd2 m3ua-asp-active-ack-message?)
;;; Now move ASP1 to ASP-INACTIVE
(m3ua-send-message fd1 0 (m3ua-make-asp-inactive-message (list)))
(m3ua-wait-for-message fd1 m3ua-asp-inactive-ack-message?)
(let ((msg (m3ua-wait-for-message fd1 m3ua-notify-message?)))
(close fd1)
(close fd2)
(if (and (= (m3ua-get-status-type-from-message msg) m3ua-other-status-type)
(= (m3ua-get-status-info-from-message msg) m3ua-insufficient-resources))
m3ua-test-result-passed
m3ua-test-result-failed))))
;;; (m3ua-sgp-asptm-v-013 tester-addr tester-port-1 tester-port-2 sut-addr sut-port-1 sut-port-2 asp-id-1 asp-id-2)
;;; This test is passed if the SUT sends a NOTIFY.
(define (m3ua-sgp-asptm-v-014 tester-addr tester-port-1 tester-port-2 sut-addr sut-port-1 sut-port-2 asp-id-1 asp-id-2)
(let ((fd1 (m3ua-connect tester-addr tester-port-1 sut-addr sut-port-1))
(fd2 (m3ua-connect tester-addr tester-port-2 sut-addr sut-port-2)))
;;; Move ASP1 to ASP-INACTIVE
(m3ua-send-message fd1 0 (m3ua-make-asp-up-message (list (m3ua-make-asp-id-parameter asp-id-1))))
(m3ua-wait-for-message fd1 m3ua-asp-up-ack-message?)
;;; Move ASP2 to ASP-ACTIVE
(m3ua-send-message fd2 0 (m3ua-make-asp-up-message (list (m3ua-make-asp-id-parameter asp-id-2))))
(m3ua-wait-for-message fd2 m3ua-asp-up-ack-message?)
(m3ua-send-message fd2 0 (m3ua-make-asp-active-message (list (m3ua-make-traffic-mode-type-parameter m3ua-traffic-mode-type-override))))
(m3ua-wait-for-message fd2 m3ua-asp-active-ack-message?)
;;; Now move ASP1 to ASP-ACTIVE
(m3ua-send-message fd1 0 (m3ua-make-asp-active-message (list (m3ua-make-traffic-mode-type-parameter m3ua-traffic-mode-type-override))))
(m3ua-wait-for-message fd1 m3ua-asp-active-ack-message?)
(m3ua-wait-for-message fd2 m3ua-notify-message?)
(close fd1)
(close fd2)
m3ua-test-result-passed))
;;; (m3ua-sgp-asptm-v-014 tester-addr tester-port-1 tester-port-2 sut-addr sut-port-1 sut-port-2 asp-id-1 asp-id-2)
;;; This test is passed if the SUT sends an ASPAC-ACK and a NOTIFY.
(define m3ua-sgp-asptm-v-015 m3ua-sgp-asptm-v-014)
;;; (m3ua-sgp-asptm-v-014 tester-addr tester-port-1 tester-port-2 sut-addr sut-port-1 sut-port-2 asp-id-1 asp-id-2)
;;; This test is passed if the SUT sends an ASPAC-ACK and a NOTIFY including the ASP-ID.
(define (m3ua-sgp-asptm-i-001 tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(m3ua-send-message fd 0 (m3ua-make-common-header (+ m3ua-version 1)
m3ua-reserved
m3ua-asptm-message-class
m3ua-aspac-message-type
m3ua-common-header-length))
(let ((msg (m3ua-wait-for-message fd m3ua-error-message?)))
(close fd)
(if (= (m3ua-get-error-code-from-message msg)
m3ua-invalid-version-error-code)
m3ua-test-result-passed
m3ua-test-result-failed))))
;;; (m3ua-sgp-asptm-i-001 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if there is an ERROR(invalid version).
(define (m3ua-sgp-asptm-i-003 tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(m3ua-send-message fd 0 (m3ua-make-asp-active-message (list (m3ua-make-traffic-mode-type-parameter m3ua-traffic-mode-type-broadcast))))
(let ((msg (m3ua-wait-for-message fd m3ua-error-message?)))
(close fd)
(if (= (m3ua-get-error-code-from-message msg)
m3ua-unsupported-traffic-mode-type-error-code)
m3ua-test-result-passed
m3ua-test-result-failed))))
;;; (m3ua-sgp-asptm-i-003 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if there is an ERROR(unsupported traffic mode type).
;;; NOTE: This test does not used the asp-active-message-parameters variable.
(define (m3ua-sgp-asptm-i-004 tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(m3ua-send-message fd 0 (m3ua-make-asp-active-message (list (m3ua-make-traffic-mode-type-parameter 4))))
(let ((msg (m3ua-wait-for-message fd m3ua-error-message?)))
(close fd)
(if (= (m3ua-get-error-code-from-message msg)
m3ua-unsupported-traffic-mode-type-error-code)
m3ua-test-result-passed
m3ua-test-result-failed))))
;;; (m3ua-sgp-asptm-i-004 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if there is an ERROR(unsupported traffic mode type).
;;; NOTE: This test does not used the asp-active-message-parameters variable.
(define (m3ua-sgp-asptm-i-005-help tester-addr tester-port sut-addr sut-port rc)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(m3ua-send-message fd 0 (m3ua-make-asp-active-message (list (m3ua-make-routing-context-parameter (list rc)))))
(let ((msg (m3ua-wait-for-message fd m3ua-error-message?)))
(close fd)
(if (= (m3ua-get-error-code-from-message msg)
m3ua-invalid-routing-context-error-code)
m3ua-test-result-passed
m3ua-test-result-failed))))
(define (m3ua-sgp-asptm-i-005 tester-addr tester-port sut-addr sut-port)
(m3ua-sgp-asptm-i-005-help tester-addr tester-port sut-addr sut-port tester-rc-invalid))
;;; (m3ua-sgp-asptm-i-005 tester-addr tester-port sut-addr sut-port tester-rc-invalid)
;;; This test is passed if there is an ERROR(invalid routing context)..
;;; NOTE: This test does not use the asp-active-message-parameters variabel.
(define (m3ua-sgp-asptm-i-006 tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(m3ua-send-message fd 0 (m3ua-make-common-header m3ua-version
m3ua-reserved
m3ua-asptm-message-class
5
m3ua-common-header-length))
(let ((msg (m3ua-wait-for-message fd m3ua-error-message?)))
(close fd)
(if (= (m3ua-get-error-code-from-message msg)
m3ua-unsupported-message-type-error-code)
m3ua-test-result-passed
m3ua-test-result-failed))))
;;; (m3ua-sgp-asptm-i-006 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if there is an ERROR(unsupported message type).
(define (m3ua-sgp-asptm-i-008 tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(m3ua-send-message fd 0 (m3ua-make-asp-active-message asp-active-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-active-ack-message?)
(m3ua-send-message fd 0 (m3ua-make-common-header m3ua-version
m3ua-reserved
m3ua-asptm-message-class
5
m3ua-common-header-length))
(let ((msg (m3ua-wait-for-message fd m3ua-error-message?)))
(close fd)
(if (= (m3ua-get-error-code-from-message msg)
m3ua-unsupported-message-type-error-code)
m3ua-test-result-passed
m3ua-test-result-failed))))
;;; (m3ua-sgp-asptm-i-008 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if there is an ERROR(unsupported message type).
(define (m3ua-sgp-asptm-i-009 tester-addr tester-port-1 tester-port-2 sut-addr sut-port-1 sut-port-2 asp-id-1 asp-id-2)
(let ((fd1 (m3ua-connect tester-addr tester-port-1 sut-addr sut-port-1))
(fd2 (m3ua-connect tester-addr tester-port-2 sut-addr sut-port-2)))
;;; Move ASP1 to ASP-ACTIVE
(m3ua-send-message fd1 0 (m3ua-make-asp-up-message (list (m3ua-make-asp-id-parameter asp-id-1))))
(m3ua-wait-for-message fd1 m3ua-asp-up-ack-message?)
(m3ua-send-message fd1 0 (m3ua-make-asp-active-message (list (m3ua-make-traffic-mode-type-parameter m3ua-traffic-mode-type-override))))
(m3ua-wait-for-message fd1 m3ua-asp-active-ack-message?)
;;; Move ASP2 to ASP-ACTIVE
(m3ua-send-message fd2 0 (m3ua-make-asp-up-message (list (m3ua-make-asp-id-parameter asp-id-2))))
(m3ua-wait-for-message fd2 m3ua-asp-up-ack-message?)
(m3ua-send-message fd2 0 (m3ua-make-asp-active-message (list (m3ua-make-traffic-mode-type-parameter m3ua-traffic-mode-type-override))))
(m3ua-wait-for-message fd2 m3ua-asp-active-ack-message?)
;;; Now fail communication to ASP1 via SHUTDOWN procedure.
(close fd1)
(let ((msg (m3ua-wait-for-message fd2 m3ua-notify-message?)))
(close fd2)
(if (and (= (m3ua-get-status-type-from-message msg) m3ua-other-status-type)
(= (m3ua-get-status-info-from-message msg) m3ua-asp-failure))
m3ua-test-result-passed
m3ua-test-result-failed))))
;;; (m3ua-sgp-asptm-i-009 tester-addr tester-port-1 tester-port-2 sut-addr sut-port-1 sut-port-2 asp-id-1 asp-id-2)
;;; This test is passed if the SUT sends a NOTIFY(ASP-FAILURE).
(define (m3ua-sgp-asptm-i-010 tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(m3ua-send-message fd 0 (m3ua-make-asp-active-message asp-active-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-active-ack-message?)
(m3ua-send-message fd 0 (m3ua-make-asp-inactive-message asp-inactive-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-inactive-ack-message?)
(close fd)
m3ua-test-result-passed))
;;; (m3ua-sgp-asptm-i-010 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if there is an ASPIA-ACK.
(define (m3ua-sgp-asptm-o-001 tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(m3ua-send-message fd 0 (m3ua-make-asp-active-message asp-active-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-active-ack-message?)
(m3ua-send-message fd 0 (m3ua-make-asp-active-message asp-active-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-active-ack-message?)
(close fd)
m3ua-test-result-passed))
;;; (m3ua-sgp-asptm-o-001 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if there is an ASPAC-ACK.
(define (m3ua-sgp-asptm-o-003 tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(m3ua-send-message fd 0 (m3ua-make-asp-inactive-message asp-inactive-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-inactive-ack-message?)
(close fd)
m3ua-test-result-passed))
;;; (m3ua-sgp-asptm-o-003 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if there is an ASPIA-ACK.
(define (m3ua-sgp-mtr-v-001 tester-addr tester-port-1 tester-port-2 sut-addr sut-port-1 sut-port-2 rc-1 rc-2 tester-pc-1 tester-pc-2)
(let ((fd1 (m3ua-connect tester-addr tester-port-1 sut-addr sut-port-1))
(fd2 (m3ua-connect tester-addr tester-port-2 sut-addr sut-port-2)))
;;; Move ASP1 to ASP-ACTIVE
(m3ua-send-message fd1 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd1 m3ua-asp-up-ack-message?)
(m3ua-send-message fd1 0 (m3ua-make-asp-active-message asp-active-message-parameters))
(m3ua-wait-for-message fd1 m3ua-asp-active-ack-message?)
;;; Move ASP2 to ASP-ACTIVE
(m3ua-send-message fd2 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd2 m3ua-asp-up-ack-message?)
(m3ua-send-message fd2 0 (m3ua-make-asp-active-message (list (m3ua-make-routing-context-parameter (list rc-1 rc-2)))))
(m3ua-wait-for-message fd2 m3ua-asp-active-ack-message?)
(sleep 10) ;;; wait for DAVA
(do ((sls 0 (+ sls 1)))
((= sls 16))
(m3ua-send-message fd1 1 (m3ua-make-data-message tester-pc-1 tester-pc-2 ss7-si iut-ni iut-mp sls ss7-message data-message-parameters))
(m3ua-wait-for-message fd2 m3ua-data-message?)
(sleep 1))
(close fd1)
(close fd2)
m3ua-test-result-unknown))
;;; (m3ua-sgp-mtr-v-001 tester-addr tester-port-1 tester-port-2 sut-addr sut-port-1 sut-port-2 tester-rc-valid-1 tester-rc-valid-2 tester-pc-1 tester-pc-2)
;;; tester-pc-1 must be the point code of ASP corresponding to tester-addr tester-port-1 <-> sut-addr sut-port-1
;;; tester-pc-2 must be the point code of ASP corresponding to tester-addr tester-port-2 <-> sut-addr sut-port-2
;;; See ETSI document.
(define (m3ua-sgp-mtr-v-002 tester-addr tester-port-1 tester-port-2 sut-addr sut-port-1 sut-port-2 tester-pc-1 tester-pc-2)
(let ((fd1 (m3ua-connect tester-addr tester-port-1 sut-addr sut-port-1))
(fd2 (m3ua-connect tester-addr tester-port-2 sut-addr sut-port-2)))
;;; Move ASP1 to ASP-ACTIVE
(m3ua-send-message fd1 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd1 m3ua-asp-up-ack-message?)
(m3ua-send-message fd1 0 (m3ua-make-asp-active-message asp-active-message-parameters))
(m3ua-wait-for-message fd1 m3ua-asp-active-ack-message?)
;;; Move ASP2 to ASP-ACTIVE
(m3ua-send-message fd2 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd2 m3ua-asp-up-ack-message?)
(m3ua-send-message fd2 0 (m3ua-make-asp-active-message asp-active-message-parameters))
(m3ua-wait-for-message fd2 m3ua-asp-active-ack-message?)
(sleep 10) ;;; wait for DAVA
(do ((sls 0 (+ sls 1)))
((= sls 16))
(m3ua-send-message fd1 1 (m3ua-make-data-message tester-pc-1 tester-pc-2 ss7-si iut-ni iut-mp sls ss7-message data-message-parameters))
(m3ua-wait-for-message fd2 m3ua-data-message?)
(sleep 1))
(close fd1)
(close fd2)
m3ua-test-result-unknown))
;;; (m3ua-sgp-asptm-v-002 tester-addr tester-port-1 tester-port-2 sut-addr sut-port-1 sut-port-2 tester-pc-1 tester-pc-2)
;;; tester-pc-1 must be the point code of ASP corresponding to tester-addr tester-port-1 <-> sut-addr sut-port-1
;;; tester-pc-2 must be the point code of ASP corresponding to tester-addr tester-port-2 <-> sut-addr sut-port-2
;;; See ETSI document.
(define (m3ua-sgp-mtr-v-002-alternate tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(m3ua-send-message fd 0 (m3ua-make-asp-active-message asp-active-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-active-ack-message?)
(m3ua-send-message fd 1 (m3ua-make-data-message tester-pc tester-pc ss7-si iut-ni iut-mp iut-sls ss7-message data-message-parameters))
(m3ua-send-message fd 1 (apply append (cons (m3ua-make-common-header m3ua-version
m3ua-reserved
m3ua-tfer-message-class
m3ua-data-message-type
m3ua-common-header-length)
data-message-parameters)))
(let ((msg (m3ua-wait-for-message fd m3ua-error-message?)))
(close fd)
(if (= (m3ua-get-error-code-from-message msg)
m3ua-missing-parameter-error-code)
m3ua-test-result-passed
m3ua-test-result-failed))))
;;; (m3ua-sgp-mtr-v-002-alternate tester-addr tester-port sut-addr sut-port)
;;; This test is passed if the SUT responds with an ERROR message to the second DATA message.
;;; FIXME: This does NOT match the current ETSI test but a change request.
(define m3ua-sgp-mtr-v-003 m3ua-sgp-mtr-v-002)
;;; (m3ua-sgp-asptm-v-003 tester-addr tester-port-1 tester-port-2 sut-addr sut-port-1 sut-port-2 tester-pc-1 tester-pc-2)
;;; tester-pc-1 must be the point code of ASP corresponding to tester-addr tester-port-1 <-> sut-addr sut-port-1
;;; tester-pc-2 must be the point code of ASP corresponding to tester-addr tester-port-2 <-> sut-addr sut-port-2
;;; See ETSI document.
(define (m3ua-sgp-mtr-v-003-alternate tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(m3ua-send-message fd 0 (m3ua-make-asp-active-message asp-active-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-active-ack-message?)
(m3ua-send-message fd 1 (m3ua-make-data-message tester-pc tester-pc ss7-si iut-ni iut-mp iut-sls ss7-message data-message-parameters))
(m3ua-send-message fd 0 (m3ua-make-data-message tester-pc tester-pc ss7-si iut-ni iut-mp iut-sls ss7-message data-message-parameters))
(let ((msg (m3ua-wait-for-message fd m3ua-error-message?)))
(close fd)
(if (= (m3ua-get-error-code-from-message msg)
m3ua-invalid-stream-identifier-error-code)
m3ua-test-result-passed
m3ua-test-result-failed))))
;;; (m3ua-sgp-mtr-v-003-alternate tester-addr tester-port sut-addr sut-port)
;;; This test is passed if the SUT sends an ERROR message for the second DATA message.
;;; FIXME: This does NOT match the current ETSI test but a change request.
(define m3ua-sgp-mtr-v-004 m3ua-sgp-mtr-v-002)
;;; (m3ua-sgp-asptm-v-004 tester-addr tester-port-1 tester-port-2 sut-addr sut-port-1 sut-port-2 tester-pc-1 tester-pc-2)
;;; tester-pc-1 must be the point code of ASP corresponding to tester-addr tester-port-1 <-> sut-addr sut-port-1
;;; tester-pc-2 must be the point code of ASP corresponding to tester-addr tester-port-2 <-> sut-addr sut-port-2
;;; See ETSI document.
(define (m3ua-sgp-mtr-i-001 tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(m3ua-send-message fd 0 (m3ua-make-asp-active-message asp-active-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-active-ack-message?)
(m3ua-send-message fd 1 (append (m3ua-make-common-header (+ 1 m3ua-version)
m3ua-reserved
m3ua-tfer-message-class
m3ua-data-message-type
(+ m3ua-common-header-length
m3ua-data-parameter-header-length
(length ss7-message)))
(m3ua-make-data-parameter tester-pc
tester-pc
ss7-si
0
0
4
ss7-message)))
(let ((msg (m3ua-wait-for-message fd m3ua-error-message?)))
(close fd)
(if (= (m3ua-get-error-code-from-message msg)
m3ua-invalid-version-error-code)
m3ua-test-result-passed
m3ua-test-result-failed))))
;;; (m3ua-sgp-mtr-i-001 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if there is an ERROR(invalid version).
(define (m3ua-sgp-mtr-i-002 tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(m3ua-send-message fd 0 (m3ua-make-asp-active-message asp-active-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-active-ack-message?)
(m3ua-send-message fd 0 (append (m3ua-make-common-header m3ua-version
m3ua-reserved
10
m3ua-data-message-type
(+ m3ua-common-header-length
m3ua-data-parameter-header-length
(length ss7-message)))
(m3ua-make-data-parameter tester-pc
tester-pc
ss7-si
0
0
4
ss7-message)))
(let ((msg (m3ua-wait-for-message fd m3ua-error-message?)))
(close fd)
(if (= (m3ua-get-error-code-from-message msg)
m3ua-unsupported-message-class-error-code)
m3ua-test-result-passed
m3ua-test-result-failed))))
;;; (m3ua-sgp-mtr-i-002 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if there is an ERROR(unsupported message class).
(define (m3ua-sgp-mtr-i-003 tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(m3ua-send-message fd 0 (m3ua-make-asp-active-message asp-active-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-active-ack-message?)
(m3ua-send-message fd 1 (append (m3ua-make-common-header m3ua-version
m3ua-reserved
m3ua-tfer-message-class
2
(+ m3ua-common-header-length
m3ua-data-parameter-header-length
(length ss7-message)))
(m3ua-make-data-parameter tester-pc
tester-pc
ss7-si
0
0
4
ss7-message)))
(let ((msg (m3ua-wait-for-message fd m3ua-error-message?)))
(close fd)
(if (= (m3ua-get-error-code-from-message msg)
m3ua-unsupported-message-type-error-code)
m3ua-test-result-passed
m3ua-test-result-failed))))
;;; (m3ua-sgp-mtr-i-003 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if there is an ERROR(unsupported message type).
(define (m3ua-sgp-rkm-v-001 tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(m3ua-wait-for-message fd m3ua-notify-message?)
(m3ua-send-message fd 0 (m3ua-make-reg-req-message
(list
(m3ua-make-routing-key-parameter
(list (m3ua-make-local-routing-key-identifier-parameter 1)
(m3ua-make-destination-point-code-parameter tester-pc))))))
(m3ua-wait-for-message fd m3ua-reg-rsp-message?)
(sleep 1)
(close fd)))
;;; (m3ua-sgp-rkm-v-001 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if a REG_RSP with result sucessfully registered is returned.
(define m3ua-sgp-rkm-v-002 m3ua-sgp-rkm-v-001)
;;; (m3ua-sgp-rkm-v-002 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if a REG_RSP with result sucessfully registered is returned.
(define (m3ua-sgp-rkm-v-003 tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(m3ua-wait-for-message fd m3ua-notify-message?)
(m3ua-send-message fd 0 (m3ua-make-reg-req-message
(list
(m3ua-make-routing-key-parameter
(list (m3ua-make-local-routing-key-identifier-parameter 1)
(m3ua-make-destination-point-code-parameter tester-pc))))))
(let ((rc (m3ua-get-routing-context-from-reg-rsp (m3ua-wait-for-message fd m3ua-reg-rsp-message?))))
(m3ua-send-message fd 0 (m3ua-make-dereg-req-message
(list (m3ua-make-routing-context-parameter (list rc))))))
(m3ua-wait-for-message fd m3ua-dereg-rsp-message?)
(sleep 1)
(close fd)))
;;; (m3ua-sgp-rkm-v-003 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if a DEREG_RSP with result sucessfully deregistered is returned.
(define (m3ua-sgp-rkm-v-004 tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(m3ua-wait-for-message fd m3ua-notify-message?)
(m3ua-send-message fd 0 (m3ua-make-reg-req-message
(list
(m3ua-make-routing-key-parameter
(list (m3ua-make-local-routing-key-identifier-parameter 1)
(m3ua-make-destination-point-code-parameter tester-pc))))))
(m3ua-wait-for-message fd m3ua-error-message?)
(sleep 1)
(close fd)))
;;; (m3ua-sgp-rkm-v-004 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if an ERROR(Unsupported Message Class) is returned.
;;; FIXME: Other error codes should be also OK.
(define (m3ua-sgp-rkm-i-003 tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(m3ua-wait-for-message fd m3ua-notify-message?)
(m3ua-send-message fd 0 (m3ua-make-reg-req-message
(list
(m3ua-make-routing-key-parameter
(list (m3ua-make-local-routing-key-identifier-parameter 1))))))
(m3ua-wait-for-message fd m3ua-reg-rsp-message?)
(sleep 1)
(close fd)))
;;; (m3ua-sgp-rkm-i-003 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if an REG_RSP with result ERROR - Invalid routing key is returned.
;;; FIXME: Is this really an invalid RC? At least it does not make sense...
(define (m3ua-sgp-rkm-i-004 tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(m3ua-wait-for-message fd m3ua-notify-message?)
(m3ua-send-message fd 0 (m3ua-make-reg-req-message
(list
(m3ua-make-routing-key-parameter
(list (m3ua-make-local-routing-key-identifier-parameter 1)
(m3ua-make-destination-point-code-parameter tester-invalid-pc))))))
(m3ua-wait-for-message fd m3ua-reg-rsp-message?)
(sleep 1)
(close fd)))
;;; (m3ua-sgp-rkm-i-004 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if an REG_RSP with result ERROR - Invalid DPC is returned.
(define (m3ua-sgp-rkm-i-005 tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(m3ua-wait-for-message fd m3ua-notify-message?)
(m3ua-send-message fd 0 (m3ua-make-reg-req-message
(list
(m3ua-make-routing-key-parameter
(list (m3ua-make-local-routing-key-identifier-parameter 1)
(m3ua-make-destination-point-code-parameter tester-pc)
(m3ua-make-network-appearance-parameter invalid-network-appearance))))))
(m3ua-wait-for-message fd m3ua-reg-rsp-message?)
(sleep 1)
(close fd)))
;;; (m3ua-sgp-rkm-i-005 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if an REG_RSP with result ERROR - Invalid Network Appearance is returned.
(define (m3ua-sgp-rkm-i-006 tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(m3ua-wait-for-message fd m3ua-notify-message?)
(m3ua-send-message fd 0 (m3ua-make-reg-req-message
(list
(m3ua-make-routing-key-parameter
(list (m3ua-make-local-routing-key-identifier-parameter 1)
(m3ua-make-destination-point-code-parameter tester-pc))))))
(m3ua-wait-for-message fd m3ua-reg-rsp-message?)
(m3ua-send-message fd 0 (m3ua-make-reg-req-message
(list
(m3ua-make-routing-key-parameter
(list (m3ua-make-local-routing-key-identifier-parameter 2)
(m3ua-make-destination-point-code-parameter tester-pc))))))
(m3ua-wait-for-message fd m3ua-reg-rsp-message?)
(sleep 1)
(close fd)))
;;; (m3ua-sgp-rkm-i-006 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if an REG_RSP with result ERROR - Can not support unique routing key is returned.
(define (m3ua-sgp-rkm-i-007 tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(m3ua-wait-for-message fd m3ua-notify-message?)
(m3ua-send-message fd 0 (m3ua-make-reg-req-message
(list
(m3ua-make-routing-key-parameter
(list (m3ua-make-local-routing-key-identifier-parameter 1)
(m3ua-make-destination-point-code-parameter tester-unauthorized-pc))))))
(m3ua-wait-for-message fd m3ua-reg-rsp-message?)
(sleep 1)
(close fd)))
;;; (m3ua-sgp-rkm-i-007 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if an REG_RSP with result ERROR - Error Permission Denied is returned.
(define (m3ua-sgp-rkm-i-008 tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(m3ua-wait-for-message fd m3ua-notify-message?)
(m3ua-send-message fd 0 (m3ua-make-reg-req-message
(list
(m3ua-make-routing-key-parameter
(list (m3ua-make-local-routing-key-identifier-parameter 1)
(m3ua-make-destination-point-code-parameter tester-unprovisioned-pc))))))
(m3ua-wait-for-message fd m3ua-reg-rsp-message?)
(sleep 1)
(close fd)))
;;; (m3ua-sgp-rkm-i-008 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if an REG_RSP with result ERROR - Error Routing key not currently provsioned is returned.
(define (m3ua-sgp-rkm-i-009 tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(m3ua-wait-for-message fd m3ua-notify-message?)
(m3ua-send-message fd 0 (m3ua-make-reg-req-message
(list
(m3ua-make-routing-key-parameter
(list (m3ua-make-local-routing-key-identifier-parameter 1)
(m3ua-make-destination-point-code-parameter tester-pc))))))
(m3ua-wait-for-message fd m3ua-reg-rsp-message?)
(sleep 1)
(close fd)))
;;; (m3ua-sgp-rkm-i-009 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if an REG_RSP with result ERROR - Error Insufficient Resources is returned.
;;; FIXME: How to arrange that the SUT is out of resources
(define (m3ua-sgp-rkm-i-010 tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(m3ua-wait-for-message fd m3ua-notify-message?)
(m3ua-send-message fd 0 (m3ua-make-reg-req-message
(list
(m3ua-make-routing-key-parameter
(list (m3ua-make-local-routing-key-identifier-parameter 1)
(m3ua-make-destination-point-code-parameter tester-pc)
(m3ua-make-circuit-range-parameter (list (list tester-pc 0 0))))))))
(m3ua-wait-for-message fd m3ua-reg-rsp-message?)
(sleep 1)
(close fd)))
;;; (m3ua-sgp-rkm-i-010 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if an REG_RSP with result ERROR - Error Unsupported RK Parameter Field is returned.
;;; It is assumed that the SUT does not support the circuit range parameter...
(define (m3ua-sgp-rkm-i-traffic-mode-test tester-addr tester-port sut-addr sut-port traffic-mode-type-1 traffic-mode-type-2)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(m3ua-wait-for-message fd m3ua-notify-message?)
(m3ua-send-message fd 0 (m3ua-make-reg-req-message
(list
(m3ua-make-routing-key-parameter
(list (m3ua-make-local-routing-key-identifier-parameter 1)
(m3ua-make-traffic-mode-type-parameter traffic-mode-type-1)
(m3ua-make-destination-point-code-parameter tester-pc))))))
(m3ua-wait-for-message fd m3ua-reg-rsp-message?)
(m3ua-send-message fd 0 (m3ua-make-reg-req-message
(list
(m3ua-make-routing-key-parameter
(list (m3ua-make-local-routing-key-identifier-parameter 2)
(m3ua-make-traffic-mode-type-parameter traffic-mode-type-2)
(m3ua-make-destination-point-code-parameter tester-pc))))))
(m3ua-wait-for-message fd m3ua-reg-rsp-message?)
(sleep 1)
(close fd)))
(define (m3ua-sgp-rkm-i-011 tester-addr tester-port sut-addr sut-port)
(m3ua-sgp-rkm-i-traffic-mode-test tester-addr tester-port sut-addr sut-port m3ua-traffic-mode-type-override m3ua-traffic-mode-type-loadshare))
;;; (m3ua-sgp-rkm-i-011 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if an REG_RSP with result ERROR - Error Unsupported/Invalid Traffic Handling Mode is returned.
(define (m3ua-sgp-rkm-i-012 tester-addr tester-port sut-addr sut-port)
(m3ua-sgp-rkm-i-traffic-mode-test tester-addr tester-port sut-addr sut-port m3ua-traffic-mode-type-override m3ua-traffic-mode-type-broadcast))
;;; (m3ua-sgp-rkm-i-012 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if an REG_RSP with result ERROR - Error Unsupported/Invalid Traffic Handling Mode is returned.
(define (m3ua-sgp-rkm-i-013 tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(m3ua-wait-for-message fd m3ua-notify-message?)
(m3ua-send-message fd 0 (m3ua-make-reg-req-message
(list
(m3ua-make-routing-key-parameter
(list (m3ua-make-local-routing-key-identifier-parameter 1)
(m3ua-make-traffic-mode-type-parameter m3ua-traffic-mode-type-invalid)
(m3ua-make-destination-point-code-parameter tester-pc))))))
(m3ua-wait-for-message fd m3ua-reg-rsp-message?)
(sleep 1)
(close fd)))
;;; (m3ua-sgp-rkm-i-013 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if an REG_RSP with result ERROR - Error Unsupported/Invalid Traffic Handling Mode is returned.
(define (m3ua-sgp-rkm-i-014 tester-addr tester-port sut-addr sut-port)
(m3ua-sgp-rkm-i-traffic-mode-test tester-addr tester-port sut-addr sut-port m3ua-traffic-mode-type-loadshare m3ua-traffic-mode-type-override))
;;; (m3ua-sgp-rkm-i-014 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if an REG_RSP with result ERROR - Error Unsupported/Invalid Traffic Handling Mode is returned.
(define (m3ua-sgp-rkm-i-015 tester-addr tester-port sut-addr sut-port)
(m3ua-sgp-rkm-i-traffic-mode-test tester-addr tester-port sut-addr sut-port m3ua-traffic-mode-type-loadshare m3ua-traffic-mode-type-broadcast))
;;; (m3ua-sgp-rkm-i-015 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if an REG_RSP with result ERROR - Error Unsupported/Invalid Traffic Handling Mode is returned.
(define (m3ua-sgp-rkm-i-017 tester-addr tester-port sut-addr sut-port)
(m3ua-sgp-rkm-i-traffic-mode-test tester-addr tester-port sut-addr sut-port m3ua-traffic-mode-type-broadcast m3ua-traffic-mode-type-override))
;;; (m3ua-sgp-rkm-i-017 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if an REG_RSP with result ERROR - Error Unsupported/Invalid Traffic Handling Mode is returned.
(define (m3ua-sgp-rkm-i-018 tester-addr tester-port sut-addr sut-port)
(m3ua-sgp-rkm-i-traffic-mode-test tester-addr tester-port sut-addr sut-port m3ua-traffic-mode-type-broadcast m3ua-traffic-mode-type-loadshare))
;;; (m3ua-sgp-rkm-i-018 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if an REG_RSP with result ERROR - Error Unsupported/Invalid Traffic Handling Mode is returned.
(define (m3ua-sgp-rkm-i-020 tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(m3ua-wait-for-message fd m3ua-notify-message?)
(m3ua-send-message fd 0 (m3ua-make-reg-req-message
(list
(m3ua-make-routing-key-parameter
(list (m3ua-make-local-routing-key-identifier-parameter 1)
(m3ua-make-destination-point-code-parameter tester-pc))))))
(m3ua-send-message fd 0 (m3ua-make-dereg-req-message
(list (m3ua-make-routing-context-parameter (list tester-rc-invalid)))))
(m3ua-wait-for-message fd m3ua-dereg-rsp-message?)
(sleep 1)
(close fd)))
;;; (m3ua-sgp-rkm-i-020 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if an REG_RSP with result ERROR - Error Not Registered is returned.
(define (m3ua-sgp-rkm-i-021 tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(m3ua-wait-for-message fd m3ua-notify-message?)
(m3ua-send-message fd 0 (m3ua-make-reg-req-message
(list
(m3ua-make-routing-key-parameter
(list (m3ua-make-local-routing-key-identifier-parameter 1)
(m3ua-make-destination-point-code-parameter tester-pc))))))
(let ((rc (m3ua-get-routing-context-from-reg-rsp (m3ua-wait-for-message fd m3ua-reg-rsp-message?))))
(m3ua-send-message fd 0 (m3ua-make-dereg-req-message
(list (m3ua-make-routing-context-parameter (list rc))))))
(m3ua-wait-for-message fd m3ua-dereg-rsp-message?)
(sleep 1)
(close fd)))
;;; (m3ua-sgp-rkm-i-021 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if a DEREG_RSP with result Error - Permission Denied is returned.
;;; FIXME: Please make sure that the registered routing key is not authorized for dereg.
(define (m3ua-sgp-rkm-i-022 tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(m3ua-wait-for-message fd m3ua-notify-message?)
(m3ua-send-message fd 0 (m3ua-make-reg-req-message
(list
(m3ua-make-routing-key-parameter
(list (m3ua-make-local-routing-key-identifier-parameter 1)
(m3ua-make-destination-point-code-parameter tester-pc))))))
(let ((rc (m3ua-get-routing-context-from-reg-rsp (m3ua-wait-for-message fd m3ua-reg-rsp-message?))))
(m3ua-send-message fd 0 (m3ua-make-asp-active-message (list (m3ua-make-routing-context-parameter (list rc)))))
(m3ua-wait-for-message fd m3ua-asp-active-ack-message?)
(m3ua-wait-for-message fd m3ua-notify-message?)
(m3ua-send-message fd 0 (m3ua-make-dereg-req-message
(list (m3ua-make-routing-context-parameter (list rc))))))
(m3ua-wait-for-message fd m3ua-dereg-rsp-message?)
(sleep 1)
(close fd)))
;;; (m3ua-sgp-rkm-i-022 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if a DEREG_RSP with result Error - ASP Currently Active For Routing Context is returned.
(define (m3ua-sgp-rkm-i-023 tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(m3ua-wait-for-message fd m3ua-notify-message?)
(m3ua-send-message fd 0 (m3ua-make-message m3ua-rkm-message-class m3ua-reserved-rkm-message-type (list)))
(m3ua-wait-for-message fd m3ua-error-message?)
(sleep 1)
(close fd)))
;;; (m3ua-sgp-rkm-i-023 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if an ERROR (Unsuported Message Type) is returned.
(define (m3ua-sgp-ssnm-001 tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(m3ua-send-message fd 0 (m3ua-make-asp-active-message asp-active-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-active-ack-message?)
(m3ua-send-message fd 0 (m3ua-make-daud-message (list (m3ua-make-affected-point-code-parameter (list (list 0 tester-congested-pc))))))
(m3ua-wait-for-message fd m3ua-scon-message?)
(close fd)
m3ua-test-result-passed))
;;; (m3ua-sgp-ssnm-001 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if there is an SCON.
(define (m3ua-sgp-ssnm-002 tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(m3ua-send-message fd 0 (m3ua-make-asp-active-message asp-active-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-active-ack-message?)
(m3ua-send-message fd 0 (m3ua-make-daud-message (list (m3ua-make-affected-point-code-parameter (list (list 0 tester-restricted-pc))))))
(m3ua-wait-for-message fd m3ua-drst-message?)
(close fd)
m3ua-test-result-passed))
;;; (m3ua-sgp-ssnm-002 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if there is an DRST.
(define (m3ua-sgp-ssnm-003 tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(m3ua-send-message fd 0 (m3ua-make-asp-active-message asp-active-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-active-ack-message?)
(m3ua-send-message fd 0 (m3ua-make-daud-message (list (m3ua-make-affected-point-code-parameter (list (list 0 tester-unavailable-pc))))))
(m3ua-wait-for-message fd m3ua-duna-message?)
(close fd)
m3ua-test-result-passed))
;;; (m3ua-sgp-ssnm-003 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if there is an DUNA.
(define (m3ua-sgp-ssnm-004 tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(m3ua-send-message fd 0 (m3ua-make-asp-active-message asp-active-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-active-ack-message?)
(m3ua-send-message fd 0 (m3ua-make-daud-message (list (m3ua-make-affected-point-code-parameter (list (list 0 tester-available-pc))))))
(m3ua-wait-for-message fd m3ua-dava-message?)
(close fd)
m3ua-test-result-passed))
;;; (m3ua-sgp-ssnm-004 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if there is an DAVA.
(define (m3ua-sgp-ssnm-004 tester-addr tester-port sut-addr sut-port)
(let ((fd (m3ua-connect tester-addr tester-port sut-addr sut-port)))
(m3ua-send-message fd 0 (m3ua-make-asp-up-message asp-up-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-up-ack-message?)
(m3ua-send-message fd 0 (m3ua-make-asp-active-message asp-active-message-parameters))
(m3ua-wait-for-message fd m3ua-asp-active-ack-message?)
(m3ua-send-message fd 0 (m3ua-make-daud-message (list (m3ua-make-affected-point-code-parameter (list (list 255 tester-available-pc))))))
(sleep 1)
(close fd)
m3ua-test-result-unknown))
;;; (m3ua-sgp-ssnm-004 tester-addr tester-port sut-addr sut-port)
;;; This test is passed if there is an DAVA.