« Previous -
Version 32/35
(diff) -
Next » -
Current version
Anonymous, 08/30/2010 02:47 pm
= Testing =
<acronym title="Installation,Configuration,Testing, depth=2">TOC</acronym>
Test SuiteA test suite for testing the functionality the server is located in /xcap/test directory.
If the software has been installed as a Debian package, you can locate the files using:
{{{
dpkg -L openxcap
}}}
Configure the credentials of a test account and the xcap root in a configuration file as follows:
{{{
~/.xcapclient.ini
}}}
{{{
[Account_test]
sip_address=alice@example.com
password=1234
xcap_root = http://xcap.example.com/xcap-root
}}}
Replace the xcap_root with the same xcap_root configured in the server and make sure the hostname points to the IP address where the server listens to.
Add the same test account to the OpenSIPS subscriber table:
{{{
INSERT INTO `subscriber` (username,domain,password,ha1)
VALUES
('alice','example.com','1234','fd7cab2287702c763e7b318b7fb2451a');
}}}
Then run the test suite:
{{{
~/openxcap/xcap/test$./test.py
test_delete (test_element.ElementTest) ... ok
test_get (test_element.ElementTest) ... WARNING: test with URI in att_value is disabled
ok
test_put_error (test_element.ElementTest) ... ok
test400_1 (test_errors.ErrorsTest) ... ok
test400_2 (test_errors.ErrorsTest) ... ok
test404 (test_errors.ErrorsTest) ... ok
test405 (test_errors.ErrorsTest) ... ok
test409 (test_errors.ErrorsTest) ... ok
test_gibberish (test_errors.ErrorsTest) ... ok
test_global_auth (test_auth.AuthTest_org_openmobilealliance_pres_rules) ... ok
test_users_auth (test_auth.AuthTest_org_openmobilealliance_pres_rules) ... ok
test_global_auth (test_auth.AuthTest_pidf_manipulation) ... ok
test_users_auth (test_auth.AuthTest_pidf_manipulation) ... ok
test_global_auth (test_auth.AuthTest_pres_rules) ... ok
test_users_auth (test_auth.AuthTest_pres_rules) ... ok
test_global_auth (test_auth.AuthTest_resource_lists) ... ok
test_users_auth (test_auth.AuthTest_resource_lists) ... ok
test_global_auth (test_auth.AuthTest_rls_services) ... ok
test_users_auth (test_auth.AuthTest_rls_services) ... ok
test_global_auth (test_auth.AuthTest_test_app) ... ok
test_users_auth (test_auth.AuthTest_test_app) ... ok
test_global_auth (test_auth.AuthTest_watchers) ... ok
test_users_auth (test_auth.AuthTest_watchers) ... ok
test_global_auth (test_auth.AuthTest_xcap_caps) ... ok
test_users_auth (test_auth.AuthTest_xcap_caps) ... ok
test_conditional_PUT (test_etags2.ETagTest) ... ok
test_conditional_PUT_2 (test_etags2.ETagTest) ... ok
test_xpath10_valid (test_xpath.XPathTest) ... ok
test_xpath11_valid (test_xpath.XPathTest) ... ok
test_xpath12_valid (test_xpath.XPathTest) ... ok
test_xpath1_valid (test_xpath.XPathTest) ... ok
test_xpath2_invalid (test_xpath.XPathTest) ... ok
test_xpath3_invalid (test_xpath.XPathTest) ... ok
test_xpath4_invalid (test_xpath.XPathTest) ... ok
test_xpath5_invalid (test_xpath.XPathTest) ... ok
test_xpath6_invalid (test_xpath.XPathTest) ... ok
test_xpath7_invalid (test_xpath.XPathTest) ... ok
test_xpath8_invalid (test_xpath.XPathTest) ... ok
test_xpath9_valid (test_xpath.XPathTest) ... ok
test_pidf_manipulation (test_presrules.PresenceRulesTest) ... ok
test_operations1 (test_resourcelists.DocumentTest) ... ok
test_operations2 (test_resourcelists.DocumentTest) ... ok
test_operations3 (test_resourcelists.DocumentTest) ... ok
test_operations4 (test_resourcelists.DocumentTest) ... ok
test_ns_bindings (test_nsbindings.NSBindingsTest) ... ok
test_has_global (test_global.TestGlobal) ... ok
test_no_global (test_global.TestGlobal) ... ok
test_errors (test_fragment.FragmentTest) ... ok
test_success (test_fragment.FragmentTest) ... ok
test_operations1 (test_rlsservices.DocumentTest) ... ok
test_operations2 (test_rlsservices.DocumentTest) ... ok
test_operations3 (test_rlsservices.DocumentTest) ... ok
test_operations4 (test_rlsservices.DocumentTest) ... ok
test_pidf_manipulation (test_pidf.PIDFTest) ... ok
test_conditional_GET (test_etags.ETagTest) ... ok
test_conditional_PUT (test_etags.ETagTest) ... ok
test_conditional_PUT_2 (test_etags.ETagTest) ... ok
test_conditional_GET (test_etags.ETagTest2) ... ok
test_conditional_PUT (test_etags.ETagTest2) ... ok
test_etag_parsing (test_etags.ETagTest2) ... ok
Testing different ways of inserting an element as described in examples from Section 8.2.3 ... ok
Testing PUT requests of form '*[@att="some"]' which require looking into body of PUT ... ok
test_replacement (test_element_put.PutElementTest) ... ok
test_schema (test_xcap_caps.XCAPCaps) ... ok
test_delete (test_attribute.AttributeTest) ... ok
test_get (test_attribute.AttributeTest) ... WARNING: test with URI in att_value is disabled
ok
test_put (test_attribute.AttributeTest) ... ok
test_get (test_watchers.Test) ... ok
----------------------------------------------------------------------
Ran 68 tests in 38.662s
OK
}}}
=== Notes ===
- Running the test suite for a given user will result in the destruction of all xcap documents belonging to that user
- Replacing 'test.py' with 'test_something.py' will run only the tests defined in test_something.py
- Make sure you enable document validation in the server, otherwise results might be unexpected
A command line client is available part of python-xcaplib, which is available as a tar archive and Debian package.
The client can be used to manipulate full or partial XML
documents on XCAP servers (not limited to OpenXCAP) and has a bash shell
command line completion facility that makes it very easy to browse through
the structure of XML documents based on XPATH.
First create xcapclient configuration file:
{{{
~/.xcapclient.ini
}}}
with your credentials and XCAP root.
{{{- this will be the default account used by xcapclient
[Account]
sip_address=alice@example.com
password=1234
xcap_root = https://xcap.example.com/xcap-root
- this will be used when -a bob command-line switch is provided
[Account_bob]
sip_address = bob@example.com
password = 1234
xcap_root = https://xcap.example.com/xcap-root
}}}
Multiple accounts can be specified. In order to select a specific account, the '-a' switch must be used:
{{{- use default account ('Account' section)
xcapclient --app xcap-caps GET
- use Bob's account ('Account_bob' section)
xcapclient -a bob --app xcap-caps GET
}}}
Operating on XCAP documents (full document handling)
In the examples folder there are sample XCAP XML documents used for the examples below:
=== PUT ===
To a document, for example, presence rules:
{{{
xcapclient -i pres-rules.xml put
}}}
On success, the command prints '201 Created' if a new document was created on the server or '200 OK' if an existing document was replaced. You should something like this:
{{{
url: http://xcap.example.com/xcap-root/resource-lists/users/alice@example.com/index.xml
201 Created
etag: "856bdac9012ee28e46cebb81e51ac2a0"
}}}
=== GET ===
{{{
xcapclient --app resource-lists get
}}}
or
{{{
xcapclient --app pres-rules get
}}}
or
{{{
xcapclient --app rls-services get
}}}
This will print the document you've just put, along with its tag.
or
{{{
xcapclient --app xcap-caps get
}}}
will print the capabilities of the XCAP server.
=== DELETE ===
{{{
xcapclient --app resource-lists delete
}}}
and
{{{
xcapclient --app pres-rules delete
}}}
and
{{{
xcapclient --app rls-services delete
}}}
Operating on XML elements (partial document handling)
It is possible to retrieve a single element in XCAP document, to replace it, to insert a new one or to remove one. To address an element, a node selector is required, which is an XPATH-like expression, defined in http://tools.ietf.org/html/rfc4825#section-6.3.
Let's put the document in section 1 again to server, so we can fetch some elements from it.
{{{
xcapclient --app resource-lists get '/resource-lists/list[@name="friends"]/entry1/display-name'
}}}
{{{
etag: "856bdac9012ee28e46cebb81e51ac2a0"
<display-name>Bill Doe</display-name>
}}}
Specifying application with --app, is no longer necessary as it may be guessed from the node selector.
To replace an element, use the node selector you would have used for retrieving the element but do PUT instead. For example if we want to fix Bill's display name:
{{{
xcapclient -i bill_display_name_fixed.xml put '/resource-lists/list[@name="friends"]/entry1/display-name'
}}}
To insert a new element one must construct a node selector that doesn't point to an existing element.
{{{
xcapclient -i alice.xml put '/resource-lists/list[@name="friends"]/entry1[@uri="sip:alice@example.com"]'
}}}
{{{
201 Created
etag: "bfbd38bed7163dd19e6e110d0dfa0876"
}}}
This will shift Bill's entry to the second position.
See README of python-xcaplib package for more detailed examples on how to create/retrieve XCAP documents.
SIP SIMPLE client SDKYou can download the command Line Tools for SIP SIMPLE client SDK from http://SipSimpleClient.com
Create an account:
{{{
sip-settings -a add user@domain
}}}
Set the newly created account as default:
{{{
sip-settings -a default user@domain
}}}
Set the xcap root:
{{{
sip-settings -a set xcap.xcap_root=http://xcap.example.com/xcap-root/
sip-settings -a set xcap.enabled=True
}}}
The following Command Line Tools are available for testing XCAP:
- Manage pres-rules document: [http://sipsimpleclient.com/wiki/xcap_pres_rules xcap-pres-rules]
- Manage rls-services document: [http://sipsimpleclient.com/wiki/xcap_rls_services xcap-rls-services]
- Manage icon: [http://sipsimpleclient.com/wiki/xcap_icon xcap-icon]
- Retrieve xcap-directory document: [http://sipsimpleclient.com/wiki/xcap_directory xcap-directory]