User:Infinity Linden/OGP Test Cases

From Second Life Wiki
Revision as of 16:59, 23 July 2008 by Infinity Linden (Talk | contribs)

Jump to: navigation, search

note: this is a brief note for informational purposes. it's eventually going to be "cleaned up" and moved to a more appropriate place on this wiki.

Introduction

What is This?

In the development of the Open Grid Protocol and the PyOGP project, it became obvious that there were no canonical lists of use cases and things to test. This page is the first effort to remediate this omission. While we don't go as far as providing use cases here, we do list common functionality and interoperability tests.

About the OGP Test Cases

The objective of the Open Grid Protocol is to specify syntax and semantics of SL Grid messages to the degree that interoperable viewers, agent domains, region domains and regions may be coded without resort to close examination of open source code from Linden Lab or peeking into the interaction between running clients and servers. The Second Life Grid has been developed sufficiently, the reasoning goes, that it should be possible to shine the bright light of inquiry on the process and document the living heck out of how the system works. Moving forward we should see advantages as software developers code to documented requirements and standards. The "OGP Test Cases" are a catalog of tests that demonstrate compatibility with the written spec.

Well... that's how it's supposed to be... In the real world, "running code" trumps written specifications, and probably will continue to do so. And that's one of the reasons we have the interop tests; properly written test cases succinctly communicate abstractions introduced in written specifications. So rather than viewing the SLGOGP spec and these tests as separate, think of them as being two sections of the same document.

Test Fixtures

Login Test Fixtures

0. agent domain fixtures - these are the "stock" agent domains, people who are testing against a different agent domain implementation will need to add their own
0. agent0.aditi.lindenlab.com
1. agent1.aditi.lindenlab.com
1. region fixtures - these are the "stock" regions, people who are testing against a different simulator will need to add their own
0. sim1.vaak.secondlife.com
2. non-existent accounts
0. a generic account that does not exist in either of the agent domains listed above
3. accounts with a single agent
0. account for agent that _has_ accepted the TOS and the critical messages
1. account for agent that _has_ accepted the TOS, but not the critical messages
2. account for agent that _has not_ accepted the TOS, but _has_ accepted the critical messages
3. account for agent that _has not_ accepted either the TOS or the critical messages
4. account for agent that _has_ accepted the TOS and the critical messages
5. account for agent that _has_ accepted the TOS, but not the critical messages
6. account for agent that _has not_ accepted the TOS, but _has_ accepted the critical messages
7. account for agent that _has not_ accepted either the TOS or the critical messages
8. account for agent that _has_ accepted the TOS and the critical messages
9. account for agent that _has_ accepted the TOS, but not the critical messages
10. account for agent that _has not_ accepted the TOS, but _has_ accepted the critical messages
11. account for agent that _has not_ accepted either the TOS or the critical messages
12. account for agent that _has_ accepted the TOS and the critical messages
13. account for agent that _has_ accepted the TOS, but not the critical messages
14. account for agent that _has not_ accepted the TOS, but _has_ accepted the critical messages
15. account for agent that _has not_ accepted either the TOS or the critical messages
16. account for agent that does not exist
4. agents for accounts with a single agent
0. agent that _has_ accepted the TOS and the critical messages
1. agent that _has_ accepted the TOS, but not the critical messages
2. agent that _has not_ accepted the TOS, but _has_ accepted the critical messages
3. agent that _has not_ accepted either the TOS or the critical messages
4. agent that _has_ accepted the TOS and the critical messages
5. agent that _has_ accepted the TOS, but not the critical messages
6. agent that _has not_ accepted the TOS, but _has_ accepted the critical messages
7. agent that _has not_ accepted either the TOS or the critical messages
8. agent that _has_ accepted the TOS and the critical messages
9. agent that _has_ accepted the TOS, but not the critical messages
10. agent that _has not_ accepted the TOS, but _has_ accepted the critical messages
11. agent that _has not_ accepted either the TOS or the critical messages
12. agent that _has_ accepted the TOS and the critical messages
13. agent that _has_ accepted the TOS, but not the critical messages
14. agent that _has not_ accepted the TOS, but _has_ accepted the critical messages
15. agent that _has not_ accepted either the TOS or the critical messages
16. agent that does not exist
5. account with multiple agents
0. account for agent 6.0 and 6.1
1. account for agent 6.2 and 6.3
2. account for agent 6.4 and 6.5
3. account for agent 6.6 and 6.7
4. account for agent 6.8 and 6.9
5. account for agent 6.10 and 6.11
6. account for agent 6.12 and 6.13
7. account for agent 6.14 and 6.15
8. account for agent 6.16 and 6.17
9. account for agent 6.18 and 6.19
6. agents for accounts with multiple agents
0. agent that _has_ accepted the TOS and the critical messages
1. agent that _has_ accepted the TOS and the critical messages
2. agent that _has_ accepted the TOS and the critical messages
3. agent that _has_ accepted the TOS, but not the critical messages
4. agent that _has_ accepted the TOS and the critical messages
5. agent that _has not_ accepted the TOS, but _has_ accepted the critical messages
6. agent that _has_ accepted the TOS and the critical messages
7. agent that _has not_ accepted either the TOS or the critical messages
8. agent that _has_ accepted the TOS, but not the critical messages
9. agent that _has_ accepted the TOS, but not the critical messages
10. agent that _has_ accepted the TOS, but not the critical messages
11. agent that _has not_ accepted the TOS, but _has_ accepted the critical messages
12. agent that _has_ accepted the TOS, but not the critical messages
13. agent that _has not_ accepted either the TOS or the critical messages
14. agent that _has not_ accepted the TOS, but _has_ accepted the critical messages
15. agent that _has not_ accepted the TOS, but _has_ accepted the critical messages
16. agent that _has not_ accepted the TOS, but _has_ accepted the critical messages
17. agent that _has not_ accepted either the TOS or the critical messages
18. agent that _has not_ accepted either the TOS or the critical messages
19. agent that _has not_ accepted either the TOS or the critical messages
20. agent that _has not_ accepted either the TOS or the critical messages
7. agent info on agent domain
0. agent info for agent 4.0, where agent domain state indicates agent has accepted TOS and viewed critical messages
1. agent info for agent 4.1, where agent domain state indicates agent has accepted TOS and viewed critical messages
2. agent info for agent 4.2, where agent domain state indicates agent has accepted TOS and viewed critical messages
3. agent info for agent 4.3, where agent domain state indicates agent has accepted TOS and viewed critical messages
4. agent info for agent 4.4, where agent domain state indicates agent has accepted TOS but not viewed critical messages
5. agent info for agent 4.5, where agent domain state indicates agent has accepted TOS but not viewed critical messages
6. agent info for agent 4.6, where agent domain state indicates agent has accepted TOS but not viewed critical messages
7. agent info for agent 4.7, where agent domain state indicates agent has accepted TOS but not viewed critical messages
8. agent info for agent 4.8, where agent domain state indicates agent has not accepted TOS but not viewed critical messages
9. agent info for agent 4.9, where agent domain state indicates agent has not accepted TOS but not viewed critical messages
10. agent info for agent 4.10, where agent domain state indicates agent has not accepted TOS but not viewed critical messages
11. agent info for agent 4.11, whereagent domain state indicates agent has not accepted TOS but not viewed critical messages
12. agent info for agent 4.12, where agent domain state indicates agent not has accepted TOS and not viewed critical messages
13. agent info for agent 4.13, where agent domain state indicates agent not has accepted TOS and not viewed critical messages
14. agent info for agent 4.14, where agent domain state indicates agent not has accepted TOS and not viewed critical messages
15. agent info for agent 4.15, where agent domain state indicates agent not has accepted TOS and not viewed critical messages
8. reason code URLs
0. url for "notice" (aka unsuccessful login)
9. faux machines - these are used to test machines blacklisted by mac address or id0
0. machine whose mac address and id0 are not blacklisted
1. machine whose mac address is blacklisted and id0 is not blacklisted
2. machine whose mac address is not blacklisted and id0 is blacklisted
3. machine whose mac address and id0 are blacklisted
10. agent domain id0 blacklist - this is the list of machines that our faux agent domain believes are blacklisted
0. id0 of a blacklisted machine
11. agent domain mac blacklist - this is the list of machines that our faux agent domain believes are blacklisted
0. mac of a blacklisted machine

Transporting Fixtures

So it might not be the best idea to publish a standard list of usernames and passwords that are used for testing in live systems. We therefore expect the actual values for the test fixtures (or at least the passwords) to be confidential. To facilitate the exchange of known fixtures, we have the following XML DTD which defines the values of fixtures, so multiple parties can communicate test data easily.

note : the values of the test fixtures below are non-normative. Fixture data is loaded from an XML file and referenced in the tests by it's id attribute.

Fixture Transport DTD

 this is an example of a DTD

An Example of Fixture Data

<?xml version="1.0"?>
<fixtures>
  <agentdomains>
    <agent id="0_0">agent0.aditi.lindenlab.com</agent>
    <agent id="0_1">agent1.aditi.lindenlab.com</agent>
  </agentdomains>
  <regions>
    <region id="1_0">
      <host>sim1.vaak.secondlife.com</host>
      <port>13001</port>
    <region>
  </region>
  <accounts>
    <account id="2_0">
      <name>idontexist</name>
      <password>mekmitasdigoat</password>
      <agents>
        <agentref ref="3_16"/>
      </agents>
    </account>
    <account id="3_0">
      <name>Ana Goat</name>
      <password>Ahutrr</password>
      <agents>
        <agentref ref="3_0"/>
      </agents>
    </account>
    <account id="3_1">
      <name>Bill Goat</name>
      <password>Btehra</password>
      <agents>
        <agentref ref="3_1"/>
      </agents>
    </account>
    <account id="3_2">
      <name>Claudette Goat</name>
      <password>Carsobitl</password>
      <agents>
        <agentref ref="3_2"/>
      </agents>
    </account>
    <account id="3_3">
      <name>Danny Goat</name>
      <password>Dloly</password>
      <agents>
        <agentref ref="3_3"/>
      </agents>
    </account>
    <account id="3_4">
      <name>Erika Goat</name>
      <password>Eudroad</password>
      <agents>
        <agentref ref="3_4"/>
      </agents>
    </account>
    <account id="3_5">
      <name>Fred Goat</name>
      <password>Fay</password>
      <agents>
        <agentref ref="3_5"/>
      </agents>
    </account>
    <account id="3_6">
      <name>Grace Goat</name>
      <password>Gsutav</password>
      <agents>
        <agentref ref="3_6"/>
      </agents>
    </account>
    <account id="3_7">
      <name>Henri Goat</name>
      <password>Hnana</password>
      <agents>
        <agentref ref="3_7"/>
      </agents>
    </account>
    <account id="3_8">
      <name>Ida Goat</name>
      <password>Ike</password>
      <agents>
        <agentref ref="3_8"/>
      </agents>
    </account>
    <account id="3_9">
      <name>Joaquin Goat</name>
      <password>Jinpseohe</password>
      <agents>
        <agentref ref="3_9"/>
      </agents>
    </account>
    <account id="3_10">
      <name>Kate Goat</name>
      <password>Klye</password>
      <agents>
        <agentref ref="3_10"/>
      </agents>
    </account>
    <account id="3_11">
      <name>Larry Goat</name>
      <password>Lruaa</password>
      <agents>
        <agentref ref="3_11"/>
      </agents>
    </account>
    <account id="3_12">
      <name>Mindy Goat</name>
      <password>Mraco</password>
      <agents>
        <agentref ref="3_12"/>
      </agents>
    </account>
    <account id="3_13">
      <name>Nicholas Goat</name>
      <password>Nnaa</password>
      <agents>
        <agentref ref="3_13"/>
      </agents>
    </account>
    <account id="3_14">
      <name>Odette Goat</name>
      <password>Oamr</password>
      <agents>
        <agentref ref="3_14"/>
      </agents>
    </account>
    <account id="3_15">
      <name>Peter Goat</name>
      <password>Pamloa</password>
      <agents>
        <agentref ref="3_15"/>
      </agents>
    </account>
    <account id="3_16">
      <name>Rose Goat</name>
      <password>Rene</password>
      <agents>
        <agentref ref="3_16"/>
      </agents>
    </account>
    <account id="5_0">
      <name>Walter Llama</name>
      <password>Sally</password>
      <agents>
        <agentref ref="6_0"/>
        <agentref ref="6_1"/>
      </agents>
    </account>
    <account id="5_1">
      <name>Virginie Llama</name>
      <password>Tdedy</password>
      <agents>
        <agentref ref="6_2"/>
        <agentref ref="6_3"/>
      </agents>
    </account>
    <account id="5_2">
      <name>Thomas Llama</name>
      <password>Vkciy</password>
      <agents>
        <agentref ref="6_4"/>
        <agentref ref="6_5"/>
      </agents>
    </account>
    <account id="5_3">
      <name>Shary Llama</name>
      <password>Wlefird</password>
      <agents>
        <agentref ref="6_6"/>
        <agentref ref="6_7"/>
      </agents>
    </account>
    <account id="5_4">
      <name>Richard Llama</name>
      <password>Yvttee</password>
      <agents>
        <agentref ref="6_8"/>
        <agentref ref="6_9"/>
      </agents>
    </account>
    <account id="5_5">
      <name>Paula Llama</name>
      <password>zoomadsl</password>
      <agents>
        <agentref ref="6_10"/>
        <agentref ref="6_11"/>
      </agents>
    </account>
    <account id="5_6">
      <name>Otto Llama</name>
      <password>sesame</password>
      <agents>
        <agentref ref="6_12"/>
        <agentref ref="6_13"/>
      </agents>
    </account>
    <account id="5_7">
      <name>Nicole Llama</name>
      <password>password</password>
      <agents>
        <agentref ref="6_14"/>
        <agentref ref="6_15"/>
      </agents>
    </account>
    <account id="5_8">
      <name>Matthew Llama</name>
      <password>tiger</password>
      <agents>
        <agentref ref="6_16"/>
        <agentref ref="6_17"/>
      </agents>
    </account>
    <account id="5_9">
      <name>Lisa Llama</name>
      <password>toor</password>
      <agents>
        <agentref ref="6_18"/>
        <agentref ref="6_19"/>
      </agents>
    </account>
  </accounts>
  <agents>
    <agent id="4_0">
      <firstname>Arlene</firstname>
      <lastname>Sheep</lastname>
      <password>smcadmin</password>
    </agent>
    <agent id="4_1">
      <firstname>Bret</firstname>
      <lastname>Sheep</lastname>
      <password>SKY_FOX</password>
    </agent>
    <agent id="4_2">
      <firstname>Cindy</firstname>
      <lastname>Sheep</lastname>
      <password>changeme</password>
    </agent>
    <agent id="4_3">
      <firstname>Don</firstname>
      <lastname>Sheep</lastname>
      <password>piranha</password>
    </agent>
    <agent id="4_4">
      <firstname>Emily</firstname>
      <lastname>Sheep</lastname>
      <password>zoomadsl</password>
    </agent>
    <agent id="4_5">
      <firstname>Franklin</firstname>
      <lastname>Sheep</lastname>
      <password>sesame</password>
    </agent>
    <agent id="4_6">
      <firstname>Gert</firstname>
      <lastname>Sheep</lastname>
      <password>password</password>
    </agent>
    <agent id="4_7">
      <firstname>Harvey</firstname>
      <lastname>Sheep</lastname>
      <password>tiger</password>
    </agent>
    <agent id="4_8">
      <firstname>Irene</firstname>
      <lastname>Sheep</lastname>
      <password>toor</password>
    </agent>
    <agent id="4_9">
      <firstname>Jose</firstname>
      <lastname>Sheep</lastname>
      <password>admin</password>
    </agent>
    <agent id="4_10">
      <firstname>Katia</firstname>
      <lastname>Sheep</lastname>
      <password>smcadmin</password>
    </agent>
    <agent id="4_11">
      <firstname>Lee</firstname>
      <lastname>Sheep</lastname>
      <password>SKY_FOX</password>
    </agent>
    <agent id="4_12">
      <firstname>Maria</firstname>
      <lastname>Sheep</lastname>
      <password>changeme</password>
    </agent>
    <agent id="4_13">
      <firstname>Nate</firstname>
      <lastname>Sheep</lastname>
      <password>piranha</password>
    </agent>
    <agent id="4_14">
      <firstname>Ophelia</firstname>
      <lastname>Sheep</lastname>
      <password>zoomadsl</password>
    </agent>
    <agent id="4_15">
      <firstname>Philippe</firstname>
      <lastname>Sheep</lastname>
      <password>sesame</password>
    </agent>
    <agent id="4_16">
      <firstname>Rina</firstname>
      <lastname>Sheep</lastname>
      <password>password</password>
    </agent>
    <agent id="6_0">
      <firstname>William</firstname>
      <lastname>Camel</lastname>
      <password>tiger</password>
    </agent>
    <agent id="6_1">
      <firstname>Valerie</firstname>
      <lastname>Camel</lastname>
      <password>toor</password>
    </agent>
    <agent id="6_2">
      <firstname>Tony</firstname>
      <lastname>Camel</lastname>
      <password>admin</password>
    </agent>
    <agent id="6_3">
      <firstname>Sandy</firstname>
      <lastname>Camel</lastname>
      <password>smcadmin</password>
    </agent>
    <agent id="6_4">
      <firstname>Rafael</firstname>
      <lastname>Camel</lastname>
      <password>SKY_FOX</password>
    </agent>
    <agent id="6_5">
      <firstname>Patty</firstname>
      <lastname>Camel</lastname>
      <password>changeme</password>
    </agent>
    <agent id="6_6">
      <firstname>Oscar</firstname>
      <lastname>Camel</lastname>
      <password>piranha</password>
    </agent>
    <agent id="6_7">
      <firstname>Nadine</firstname>
      <lastname>Camel</lastname>
      <password>zoomadsl</password>
    </agent>
    <agent id="6_8">
      <firstname>Michael</firstname>
      <lastname>Camel</lastname>
      <password>sesame</password>
    </agent>
    <agent id="6_9">
      <firstname>Leslie</firstname>
      <lastname>Camel</lastname>
      <password>password</password>
    </agent>
    <agent id="6_10">
      <firstname>Kirk</firstname>
      <lastname>Camel</lastname>
      <password>tiger</password>
    </agent>
    <agent id="6_11">
      <firstname>Joyce</firstname>
      <lastname>Camel</lastname>
      <password>toor</password>
    </agent>
    <agent id="6_12">
      <firstname>Isaac</firstname>
      <lastname>Camel</lastname>
      <password>admin</password>
    </agent>
    <agent id="6_13">
      <firstname>Helene</firstname>
      <lastname>Camel</lastname>
      <password>smcadmin</password>
    </agent>
    <agent id="6_14">
      <firstname>Gordon</firstname>
      <lastname>Camel</lastname>
      <password>SKY_FOX</password>
    </agent>
    <agent id="6_15">
      <firstname>Florence</firstname>
      <lastname>Camel</lastname>
      <password>changeme</password>
    </agent>
    <agent id="6_16">
      <firstname>Ernesto</firstname>
      <lastname>Camel</lastname>
      <password>ntacdmax</password>
    </agent>
    <agent id="6_17">
      <firstname>Debby</firstname>
      <lastname>Camel</lastname>
      <password>pento</password>
    </agent>
    <agent id="6_18">
      <firstname>Chris</firstname>
      <lastname>Camel</lastname>
      <password>microbusiness</password>
    </agent>
    <agent id="6_19">
      <firstname>Beryl</firstname>
      <lastname>Camel</lastname>
      <password>johnlee</password>
    </agent>
    <agent id="6_20">
      <firstname>Alberto</firstname>
      <lastname>Camel</lastname>
      <password>piranha</password>
    </agent>
  </agents>
  <urls>
    <url id="8_0">http://agent0.aditi.lindenlab.com/messages/notice.html</url>
  </urls>
  <fauxmachines>
    <fauxmachine id="9_0">
      <mac>01:80:C2:00:00:00</mac>
      <id0>3fPkIs1eG0doeDj8uscIZQ==</id0>
    </fauxmachine>
    <fauxmachine id="9_0">
      <mac>01:80:C2:00:00:01</mac>
      <id0>3fPkIs1eG0doeDj8uscIZQ==</id0>
    </fauxmachine>
    <fauxmachine id="9_0">
      <mac>01:80:C2:00:00:00</mac>
      <id0>4EahsGwT/GYg9uBSQeKcNA==</id0>
    </fauxmachine>
    <fauxmachine id="9_0">
      <mac>01:80:C2:00:00:01</mac>
      <id0>4EahsGwT/GYg9uBSQeKcNA==</id0>
    </fauxmachine>
  </fauxmachines>
  <id0blacklist>
    <id0 id="10_0">4EahsGwT/GYg9uBSQeKcNA==</id0>
  </id0blacklist>
  <macblaclist>
    <mac id="11_0">01:80:C2:00:00:01</mac>
  </macblacklist>
</fixtures>

Base Tests

REST Tests

LLSD (Linden Lab Structured Data)

Event Queue

Capabilities

Resource Tests

Agent Credential

Account Credential

Login Tests

Login is the process of associating a viewer with an agent domain, then placing the user's avatar in a region managed by a (potentially separate) region domain. The spec describes logging in as the sequence:

  1. The viewer authenticates to an agent domain for the authorized control of a particular agent.
  2. The viewer directs the agent domain to to place the agent in a region.
  3. The agent domain contacts the region domain for the region, and negotiates placement of the agent.
  4. The region grants access to the agent domain, which in turn passes some of that granted access on to the viewer.

Testing the login process means logging each of these steps, in order. We should also test that executing them out of order leads to an error.

We assume the code providing underlying services (such as the event queue, LLSD serialization / deserialization, MD5 Hash production, etc.) is reliable and has been tested.

Tests From Client to Agent Domain

0. test agent authentication
0. authenticate agents in fixtures 4.[0-3] with correct authenticator
expect seed cap
1. test failures in agent authentication
0. authenticate agents in fixtures 4.[0-3] with incorrect authenticator
expect reason
2. test account authentication
0. authenticate accounts in fixtures 3.[0-3] with correct authenticator
expect seed cap
1. authenticate accounts in fixture 5.0 with one of of the agent names from fixture 6.0 or 6.1
expect seed cap
3. test non-existent agent
0. attempt to authenticate with fixture 3.4
expect reason "notice" with url fixture 8.0
4. test non-existent account
0. attempt to authenticate with fixture 2.0
expect reason "notice" with url fixture 8.0
5. test non-existing agent in existent account
0. attempt to authenticate with fixture 3.4 and name from 2.0
expect reason "notice" with url fixture 8.0
6. test existing account with no agent specified in account with one agent
0. attempt to authenticate with fixtures 3.[0...3] with no name specified
expect seed cap
7. test existing account with no agent specified in account with multiple agents
0. attempt to authenticate with fixtures 5.[0...9] with no name specified
expect reason "select_agent"
8. test existing account which has been blacklisted
0. attempt to authenticate with fixture 4.0 and faux machine 9.1
expect reason "blacklisted"
1. attempt to authenticate with fixture 4.0 and faux machine 9.2
expect reason "blacklisted"
2. attempt to authenticate with fixture 4.0 and faux machine 9.3
expect reason "blacklisted"

Teleport Tests