Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Michael Telatynski
Olm
Commits
b140e481
Commit
b140e481
authored
Oct 25, 2016
by
pedroGitt
Browse files
Add missing copyright header
Add sanity tests for OlmAccount and OlmSession Add a first version of MatchInboundSession
parent
232de794
Changes
5
Hide whitespace changes
Inline
Side-by-side
java/android/OlmLibSdk/olm-sdk/src/androidTest/java/org/matrix/olm/OlmAccountTest.java
View file @
b140e481
/*
* Copyright 2016 OpenMarket Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.matrix.olm
;
import
android.accounts.Account
;
import
android.content.Context
;
import
android.content.SharedPreferences
;
import
android.support.test.runner.AndroidJUnit4
;
import
android.text.TextUtils
;
import
android.util.Log
;
...
...
@@ -18,7 +32,6 @@ import org.junit.Test;
import
org.junit.runner.RunWith
;
import
org.junit.runners.MethodSorters
;
import
java.io.File
;
import
java.io.FileInputStream
;
import
java.io.FileNotFoundException
;
import
java.io.FileOutputStream
;
...
...
@@ -28,7 +41,6 @@ import java.io.ObjectOutputStream;
import
java.util.Iterator
;
import
static
android
.
support
.
test
.
InstrumentationRegistry
.
getInstrumentation
;
import
static
org
.
junit
.
Assert
.
assertEquals
;
import
static
org
.
junit
.
Assert
.
assertNotNull
;
import
static
org
.
junit
.
Assert
.
assertNull
;
import
static
org
.
junit
.
Assert
.
assertTrue
;
...
...
@@ -71,6 +83,9 @@ public class OlmAccountTest {
// TBD
}
/**
* Basic test: creation and release.
*/
@Test
public
void
test01CreateReleaseAccount
()
{
try
{
...
...
@@ -102,12 +117,18 @@ public class OlmAccountTest {
assertTrue
(
0
!=
olmNativeInstance
);
}
/**
* Test if {@link OlmAccount#identityKeys()} returns a JSON object
* that contains the following keys: {@link OlmAccount#JSON_KEY_FINGER_PRINT_KEY}
* and {@link OlmAccount#JSON_KEY_IDENTITY_KEY}
*/
@Test
public
void
test05IdentityKeys
()
{
JSONObject
identityKeysJson
=
mOlmAccount
.
identityKeys
();
assertNotNull
(
identityKeysJson
);
Log
.
d
(
LOG_TAG
,
"## testIdentityKeys Keys="
+
identityKeysJson
);
// is JSON_KEY_FINGER_PRINT_KEY present?
try
{
String
fingerPrintKey
=
identityKeysJson
.
getString
(
OlmAccount
.
JSON_KEY_FINGER_PRINT_KEY
);
assertTrue
(
"fingerprint key missing"
,!
TextUtils
.
isEmpty
(
fingerPrintKey
));
...
...
@@ -116,6 +137,7 @@ public class OlmAccountTest {
assertTrue
(
"Exception MSg="
+
e
.
getMessage
(),
false
);
}
// is JSON_KEY_IDENTITY_KEY present?
try
{
String
identityKey
=
identityKeysJson
.
getString
(
OlmAccount
.
JSON_KEY_IDENTITY_KEY
);
assertTrue
(
"identity key missing"
,!
TextUtils
.
isEmpty
(
identityKey
));
...
...
@@ -138,12 +160,18 @@ public class OlmAccountTest {
assertTrue
(
maxOneTimeKeys
>
0
);
}
/**
* Test one time keys generation.
*/
@Test
public
void
test07GenerateOneTimeKeys
()
{
int
retValue
=
mOlmAccount
.
generateOneTimeKeys
(
GENERATION_ONE_TIME_KEYS_NUMBER
);
assertTrue
(
0
==
retValue
);
}
/**
* Test the generated amount of one time keys = GENERATION_ONE_TIME_KEYS_NUMBER.
*/
@Test
public
void
test08OneTimeKeysJsonFormat
()
{
int
oneTimeKeysCount
=
0
;
...
...
@@ -227,11 +255,8 @@ public class OlmAccountTest {
// get keys references
JSONObject
identityKeysRef
=
accountRef
.
identityKeys
();
JSONObject
oneTimeKeysRef
=
accountRef
.
oneTimeKeys
();
/*Context context = getInstrumentation().getContext();
SharedPreferences sharedPref = context.getSharedPreferences("TestPref",Context.MODE_PRIVATE);
SharedPreferences.Editor editPref = sharedPref.edit();
editPref.putLong();*/
assertNotNull
(
identityKeysRef
);
assertNotNull
(
oneTimeKeysRef
);
try
{
Context
context
=
getInstrumentation
().
getContext
();
...
...
@@ -249,20 +274,19 @@ public class OlmAccountTest {
ObjectInputStream
objectInput
=
new
ObjectInputStream
(
fileInput
);
accountDeserial
=
(
OlmAccount
)
objectInput
.
readObject
();
objectInput
.
close
();
assertNotNull
(
accountDeserial
);
// get de-serialized keys
JSONObject
identityKeys
2
=
accountDeserial
.
identityKeys
();
assertNotNull
(
identity
Keys
2
);
JSONObject
oneTimeKeys2
=
accountDeserial
.
oneTimeKeys
(
);
assertNotNull
(
oneTimeKeys
2
);
JSONObject
identityKeys
Deserial
=
accountDeserial
.
identityKeys
();
JSONObject
oneTimeKeysDeserial
=
accountDeserial
.
oneTime
Keys
(
);
assertNotNull
(
identityKeysDeserial
);
assertNotNull
(
oneTimeKeys
Deserial
);
// compare identity keys
assertTrue
(
identityKeys
2
.
toString
().
equals
(
identityKeysRef
.
toString
()));
assertTrue
(
identityKeys
Deserial
.
toString
().
equals
(
identityKeysRef
.
toString
()));
// compare onetime keys
assertTrue
(
oneTimeKeys
2
.
toString
().
equals
(
oneTimeKeysRef
.
toString
()));
assertTrue
(
oneTimeKeys
Deserial
.
toString
().
equals
(
oneTimeKeysRef
.
toString
()));
accountRef
.
releaseAccount
();
accountDeserial
.
releaseAccount
();
...
...
@@ -285,4 +309,50 @@ public class OlmAccountTest {
}
// ****************************************************
// *************** SANITY CHECK TESTS *****************
// ****************************************************
@Test
public
void
test14GenerateOneTimeKeysError
()
{
// keys number = 0 => no error
int
retValue
=
mOlmAccount
.
generateOneTimeKeys
(
0
);
assertTrue
(
0
==
retValue
);
// keys number = negative value
retValue
=
mOlmAccount
.
generateOneTimeKeys
(-
50
);
assertTrue
(-
1
==
retValue
);
}
@Test
public
void
test15RemoveOneTimeKeysForSessionError
()
{
OlmAccount
olmAccount
=
null
;
try
{
olmAccount
=
new
OlmAccount
();
}
catch
(
OlmException
e
)
{
assertTrue
(
e
.
getMessage
(),
false
);
}
int
sessionRetCode
=
olmAccount
.
removeOneTimeKeysForSession
(
null
);
// test against no matching keys
assertTrue
(-
1
==
sessionRetCode
);
olmAccount
.
releaseAccount
();
}
@Test
public
void
test16SignMessageError
()
{
OlmAccount
olmAccount
=
null
;
try
{
olmAccount
=
new
OlmAccount
();
}
catch
(
OlmException
e
)
{
assertTrue
(
e
.
getMessage
(),
false
);
}
String
clearMsg
=
null
;
String
signedMsg
=
olmAccount
.
signMessage
(
clearMsg
);
assertNull
(
signedMsg
);
olmAccount
.
releaseAccount
();
}
}
java/android/OlmLibSdk/olm-sdk/src/androidTest/java/org/matrix/olm/OlmGroupSessionTest.java
View file @
b140e481
/*
* Copyright 2016 OpenMarket Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.matrix.olm
;
import
android.content.Context
;
...
...
java/android/OlmLibSdk/olm-sdk/src/androidTest/java/org/matrix/olm/OlmSessionTest.java
View file @
b140e481
/*
* Copyright 2016 OpenMarket Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.matrix.olm
;
import
android.content.Context
;
import
android.support.test.runner.AndroidJUnit4
;
import
android.util.Log
;
import
org.json.JSONException
;
import
org.json.JSONObject
;
import
org.junit.BeforeClass
;
import
org.junit.FixMethodOrder
;
...
...
@@ -18,7 +33,6 @@ import java.io.FileOutputStream;
import
java.io.IOException
;
import
java.io.ObjectInputStream
;
import
java.io.ObjectOutputStream
;
import
java.util.Iterator
;
import
static
android
.
support
.
test
.
InstrumentationRegistry
.
getInstrumentation
;
import
static
org
.
junit
.
Assert
.
assertNotNull
;
...
...
@@ -28,7 +42,9 @@ import static org.junit.Assert.assertTrue;
@FixMethodOrder
(
MethodSorters
.
NAME_ASCENDING
)
public
class
OlmSessionTest
{
private
static
final
String
LOG_TAG
=
"OlmSessionTest"
;
private
final
String
INVALID_PRE_KEY
=
"invalid PRE KEY hu hu!"
;
private
final
String
FILE_NAME_SERIAL_SESSION
=
"SerialSession"
;
private
final
int
ONE_TIME_KEYS_NUMBER
=
4
;
private
static
OlmManager
mOlmManager
;
...
...
@@ -73,30 +89,14 @@ public class OlmSessionTest {
// get bob identity key
JSONObject
bobIdentityKeysJson
=
bobAccount
.
identityKeys
();
assertNotNull
(
bobIdentityKeysJson
);
try
{
bobIdentityKey
=
bobIdentityKeysJson
.
getString
(
OlmAccount
.
JSON_KEY_IDENTITY_KEY
);
assertTrue
(
null
!=
bobIdentityKey
);
}
catch
(
JSONException
e
)
{
assertTrue
(
"Exception MSg="
+
e
.
getMessage
(),
false
);
}
bobIdentityKey
=
TestHelper
.
getIdentityKey
(
bobIdentityKeysJson
);
assertTrue
(
null
!=
bobIdentityKey
);
// get bob one time keys
assertTrue
(
0
==
bobAccount
.
generateOneTimeKeys
(
ONE_TIME_KEYS_NUMBER
));
JSONObject
bobOneTimeKeysJsonObj
=
bobAccount
.
oneTimeKeys
();
assertNotNull
(
bobOneTimeKeysJsonObj
);
try
{
JSONObject
generatedKeys
=
bobOneTimeKeysJsonObj
.
getJSONObject
(
OlmAccount
.
JSON_KEY_ONE_TIME_KEY
);
assertNotNull
(
OlmAccount
.
JSON_KEY_ONE_TIME_KEY
+
" object is missing"
,
generatedKeys
);
Iterator
<
String
>
generatedKeysIt
=
generatedKeys
.
keys
();
if
(
generatedKeysIt
.
hasNext
())
{
bobOneTimeKey
=
generatedKeys
.
getString
(
generatedKeysIt
.
next
());
}
assertNotNull
(
bobOneTimeKey
);
}
catch
(
JSONException
e
)
{
assertTrue
(
"Exception Msg="
+
e
.
getMessage
(),
false
);
}
bobOneTimeKey
=
TestHelper
.
getOneTimeKey
(
bobOneTimeKeysJsonObj
,
1
);
assertNotNull
(
bobOneTimeKey
);
// CREATE ALICE SESSION
OlmSession
aliceSession
=
null
;
...
...
@@ -112,6 +112,7 @@ public class OlmSessionTest {
String
clearMsg
=
"Heloo bob , this is alice!"
;
OlmMessage
encryptedMsgToBob
=
aliceSession
.
encryptMessage
(
clearMsg
);
assertNotNull
(
encryptedMsgToBob
);
assertNotNull
(
encryptedMsgToBob
.
mCipherText
);
Log
.
d
(
LOG_TAG
,
"## test01AliceToBob(): encryptedMsg="
+
encryptedMsgToBob
.
mCipherText
);
// CREATE BOB INBOUND SESSION and decrypt message from alice
...
...
@@ -122,7 +123,7 @@ public class OlmSessionTest {
assertTrue
(
"Exception Msg="
+
e
.
getMessage
(),
false
);
}
assertTrue
(
0
!=
bobSession
.
getOlmSessionId
());
assert
NotNull
(
bobSession
.
initInboundSessionWithAccount
(
bobAccount
,
encryptedMsgToBob
.
mCipherText
));
assert
True
(
0
==
bobSession
.
initInboundSessionWithAccount
(
bobAccount
,
encryptedMsgToBob
.
mCipherText
));
String
decryptedMsg
=
bobSession
.
decryptMessage
(
encryptedMsgToBob
);
assertNotNull
(
decryptedMsg
);
...
...
@@ -131,6 +132,7 @@ public class OlmSessionTest {
// clean objects..
assertTrue
(
0
==
bobAccount
.
removeOneTimeKeysForSession
(
bobSession
));
// release accounts
bobAccount
.
releaseAccount
();
aliceAccount
.
releaseAccount
();
...
...
@@ -154,9 +156,8 @@ public class OlmSessionTest {
*/
@Test
public
void
test02AliceToBobBackAndForth
()
{
final
int
ONE_TIME_KEYS_NUMBER
=
1
;
String
bobIdentityKey
=
null
;
String
bobOneTimeKey
=
null
;
String
bobIdentityKey
;
String
bobOneTimeKey
;
OlmAccount
aliceAccount
=
null
;
OlmAccount
bobAccount
=
null
;
...
...
@@ -174,31 +175,14 @@ public class OlmSessionTest {
// get bob identity key
JSONObject
bobIdentityKeysJson
=
bobAccount
.
identityKeys
();
assertNotNull
(
bobIdentityKeysJson
);
try
{
bobIdentityKey
=
bobIdentityKeysJson
.
getString
(
OlmAccount
.
JSON_KEY_IDENTITY_KEY
);
assertTrue
(
null
!=
bobIdentityKey
);
}
catch
(
JSONException
e
)
{
assertTrue
(
"Exception MSg="
+
e
.
getMessage
(),
false
);
}
bobIdentityKey
=
TestHelper
.
getIdentityKey
(
bobIdentityKeysJson
);
assertTrue
(
null
!=
bobIdentityKey
);
// get bob one time keys
assertTrue
(
0
==
bobAccount
.
generateOneTimeKeys
(
ONE_TIME_KEYS_NUMBER
));
JSONObject
bobOneTimeKeysJsonObj
=
bobAccount
.
oneTimeKeys
();
assertNotNull
(
bobOneTimeKeysJsonObj
);
try
{
JSONObject
generatedKeys
=
bobOneTimeKeysJsonObj
.
getJSONObject
(
OlmAccount
.
JSON_KEY_ONE_TIME_KEY
);
assertNotNull
(
OlmAccount
.
JSON_KEY_ONE_TIME_KEY
+
" object is missing"
,
generatedKeys
);
Iterator
<
String
>
generatedKeysIt
=
generatedKeys
.
keys
();
if
(
generatedKeysIt
.
hasNext
())
{
// return first otk
bobOneTimeKey
=
generatedKeys
.
getString
(
generatedKeysIt
.
next
());
}
assertNotNull
(
bobOneTimeKey
);
}
catch
(
JSONException
e
)
{
assertTrue
(
"Exception MSg="
+
e
.
getMessage
(),
false
);
}
bobOneTimeKey
=
TestHelper
.
getOneTimeKey
(
bobOneTimeKeysJsonObj
,
1
);
assertNotNull
(
bobOneTimeKey
);
// CREATE ALICE SESSION
OlmSession
aliceSession
=
null
;
...
...
@@ -215,6 +199,7 @@ public class OlmSessionTest {
OlmMessage
encryptedAliceToBobMsg1
=
aliceSession
.
encryptMessage
(
helloClearMsg
);
assertNotNull
(
encryptedAliceToBobMsg1
);
assertNotNull
(
encryptedAliceToBobMsg1
.
mCipherText
);
// CREATE BOB INBOUND SESSION and decrypt message from alice
OlmSession
bobSession
=
null
;
...
...
@@ -224,7 +209,7 @@ public class OlmSessionTest {
assertTrue
(
"Exception Msg="
+
e
.
getMessage
(),
false
);
}
assertTrue
(
0
!=
bobSession
.
getOlmSessionId
());
assert
NotNull
(
bobSession
.
initInboundSessionWithAccount
(
bobAccount
,
encryptedAliceToBobMsg1
.
mCipherText
));
assert
True
(
0
==
bobSession
.
initInboundSessionWithAccount
(
bobAccount
,
encryptedAliceToBobMsg1
.
mCipherText
));
// DECRYPT MESSAGE FROM ALICE
String
decryptedMsg01
=
bobSession
.
decryptMessage
(
encryptedAliceToBobMsg1
);
...
...
@@ -233,8 +218,6 @@ public class OlmSessionTest {
// MESSAGE COMPARISON: decrypted vs encrypted
assertTrue
(
helloClearMsg
.
equals
(
decryptedMsg01
));
assertTrue
(
0
==
bobAccount
.
removeOneTimeKeysForSession
(
bobSession
));
// BACK/FORTH MESSAGE COMPARISON
String
clearMsg1
=
"Hello I'm Bob!"
;
String
clearMsg2
=
"Isn't life grand?"
;
...
...
@@ -256,15 +239,19 @@ public class OlmSessionTest {
String
decryptedMsg3
=
aliceSession
.
decryptMessage
(
encryptedMsg3
);
assertNotNull
(
decryptedMsg3
);
// and one more form alice..
encryptedMsg1
=
aliceSession
.
encryptMessage
(
clearMsg1
);
// comparison tests
assertTrue
(
clearMsg1
.
equals
(
decryptedMsg1
));
assertTrue
(
clearMsg2
.
equals
(
decryptedMsg2
));
assertTrue
(
clearMsg3
.
equals
(
decryptedMsg3
));
// clean objects..
assertTrue
(
0
==
bobAccount
.
removeOneTimeKeysForSession
(
bobSession
));
bobAccount
.
releaseAccount
();
aliceAccount
.
releaseAccount
();
bobSession
.
releaseSession
();
aliceAccount
.
releaseAccount
();
aliceSession
.
releaseSession
();
}
...
...
@@ -312,24 +299,86 @@ public class OlmSessionTest {
// must be the same for both ends of the conversation
assertTrue
(
aliceSessionId
.
equals
(
bobSessionId
));
aliceAccount
.
releaseAccount
();
aliceSession
.
releaseSession
();
bobAccount
.
releaseAccount
();
bobSession
.
releaseSession
();
}
@Test
public
void
test04MatchInboundSession
()
{
OlmAccount
aliceAccount
=
null
,
bobAccount
=
null
;
OlmSession
aliceSession
=
null
,
bobSession
=
null
;
// ACCOUNTS CREATION
try
{
aliceAccount
=
new
OlmAccount
();
bobAccount
=
new
OlmAccount
();
}
catch
(
OlmException
e
)
{
assertTrue
(
e
.
getMessage
(),
false
);
}
// CREATE ALICE SESSION
try
{
aliceSession
=
new
OlmSession
();
bobSession
=
new
OlmSession
();
}
catch
(
OlmException
e
)
{
assertTrue
(
"Exception Msg="
+
e
.
getMessage
(),
false
);
}
// get bob/luke identity key
JSONObject
bobIdentityKeysJson
=
bobAccount
.
identityKeys
();
JSONObject
aliceIdentityKeysJson
=
aliceAccount
.
identityKeys
();
String
bobIdentityKey
=
TestHelper
.
getIdentityKey
(
bobIdentityKeysJson
);
String
aliceIdentityKey
=
TestHelper
.
getIdentityKey
(
aliceIdentityKeysJson
);
// get bob/luke one time keys
assertTrue
(
0
==
bobAccount
.
generateOneTimeKeys
(
ONE_TIME_KEYS_NUMBER
));
assertTrue
(
0
==
aliceAccount
.
generateOneTimeKeys
(
ONE_TIME_KEYS_NUMBER
));
JSONObject
bobOneTimeKeysJsonObj
=
bobAccount
.
oneTimeKeys
();
String
bobOneTimeKey1
=
TestHelper
.
getOneTimeKey
(
bobOneTimeKeysJsonObj
,
1
);
// create alice inbound session for bob
assertTrue
(
0
==
aliceSession
.
initOutboundSessionWithAccount
(
aliceAccount
,
bobIdentityKey
,
bobOneTimeKey1
));
String
aliceClearMsg
=
"hello helooo to bob!"
;
OlmMessage
encryptedAliceToBobMsg1
=
aliceSession
.
encryptMessage
(
aliceClearMsg
);
assertTrue
(
false
==
bobSession
.
matchesInboundSession
(
encryptedAliceToBobMsg1
.
mCipherText
));
// init bob session with alice PRE KEY
assertTrue
(
0
==
bobSession
.
initInboundSessionWithAccount
(
bobAccount
,
encryptedAliceToBobMsg1
.
mCipherText
));
// test matchesInboundSession() and matchesInboundSessionFrom()
assertTrue
(
bobSession
.
matchesInboundSession
(
encryptedAliceToBobMsg1
.
mCipherText
));
assertTrue
(
bobSession
.
matchesInboundSessionFrom
(
aliceIdentityKey
,
encryptedAliceToBobMsg1
.
mCipherText
));
// following requires olm native lib new version with https://github.com/matrix-org/olm-backup/commit/7e9f3bebb8390f975a76c0188ce4cb460fe6692e
//assertTrue(false==bobSession.matchesInboundSessionFrom(bobIdentityKey, encryptedAliceToBobMsg1.mCipherText));
// release objects
assertTrue
(
0
==
bobAccount
.
removeOneTimeKeysForSession
(
bobSession
));
aliceAccount
.
releaseAccount
();
bobAccount
.
releaseAccount
();
aliceSession
.
releaseSession
();
bobSession
.
releaseSession
();
}
// ********************************************************
// ************* SERIALIZATION TEST ***********************
// ********************************************************
/**
* Same as test02AliceToBobBackAndForth() but alice's session
* Same as
{@link #
test02AliceToBobBackAndForth()
},
but alice's session
* is serialized and de-serialized before performing the final
* comparison (encrypt vs )
*/
@Test
public
void
test0
3
SessionSerialization
()
{
public
void
test0
5
SessionSerialization
()
{
final
int
ONE_TIME_KEYS_NUMBER
=
1
;
String
bobIdentityKey
=
null
;
String
bobOneTimeKey
=
null
;
String
bobIdentityKey
;
String
bobOneTimeKey
;
OlmAccount
aliceAccount
=
null
;
OlmAccount
bobAccount
=
null
;
OlmSession
aliceSessionDeserial
;
OlmSession
aliceSessionDeserial
=
null
;
// creates alice & bob accounts
try
{
...
...
@@ -345,31 +394,14 @@ public class OlmSessionTest {
// get bob identity key
JSONObject
bobIdentityKeysJson
=
bobAccount
.
identityKeys
();
assertNotNull
(
bobIdentityKeysJson
);
try
{
bobIdentityKey
=
bobIdentityKeysJson
.
getString
(
OlmAccount
.
JSON_KEY_IDENTITY_KEY
);
assertTrue
(
null
!=
bobIdentityKey
);
}
catch
(
JSONException
e
)
{
assertTrue
(
"Exception MSg="
+
e
.
getMessage
(),
false
);
}
bobIdentityKey
=
TestHelper
.
getIdentityKey
(
bobIdentityKeysJson
);
assertTrue
(
null
!=
bobIdentityKey
);
// get bob one time keys
assertTrue
(
0
==
bobAccount
.
generateOneTimeKeys
(
ONE_TIME_KEYS_NUMBER
));
JSONObject
bobOneTimeKeysJsonObj
=
bobAccount
.
oneTimeKeys
();
assertNotNull
(
bobOneTimeKeysJsonObj
);
try
{
JSONObject
generatedKeys
=
bobOneTimeKeysJsonObj
.
getJSONObject
(
OlmAccount
.
JSON_KEY_ONE_TIME_KEY
);
assertNotNull
(
OlmAccount
.
JSON_KEY_ONE_TIME_KEY
+
" object is missing"
,
generatedKeys
);
Iterator
<
String
>
generatedKeysIt
=
generatedKeys
.
keys
();
if
(
generatedKeysIt
.
hasNext
())
{
// return first otk
bobOneTimeKey
=
generatedKeys
.
getString
(
generatedKeysIt
.
next
());
}
assertNotNull
(
bobOneTimeKey
);
}
catch
(
JSONException
e
)
{
assertTrue
(
"Exception MSg="
+
e
.
getMessage
(),
false
);
}
bobOneTimeKey
=
TestHelper
.
getOneTimeKey
(
bobOneTimeKeysJsonObj
,
1
);
assertNotNull
(
bobOneTimeKey
);
// CREATE ALICE SESSION
OlmSession
aliceSession
=
null
;
...
...
@@ -386,6 +418,7 @@ public class OlmSessionTest {
OlmMessage
encryptedAliceToBobMsg1
=
aliceSession
.
encryptMessage
(
helloClearMsg
);
assertNotNull
(
encryptedAliceToBobMsg1
);
assertNotNull
(
encryptedAliceToBobMsg1
.
mCipherText
);
// CREATE BOB INBOUND SESSION and decrypt message from alice
OlmSession
bobSession
=
null
;
...
...
@@ -395,7 +428,7 @@ public class OlmSessionTest {
assertTrue
(
"Exception Msg="
+
e
.
getMessage
(),
false
);
}
assertTrue
(
0
!=
bobSession
.
getOlmSessionId
());
assert
NotNull
(
bobSession
.
initInboundSessionWithAccount
(
bobAccount
,
encryptedAliceToBobMsg1
.
mCipherText
));
assert
True
(
0
==
bobSession
.
initInboundSessionWithAccount
(
bobAccount
,
encryptedAliceToBobMsg1
.
mCipherText
));
// DECRYPT MESSAGE FROM ALICE
String
decryptedMsg01
=
bobSession
.
decryptMessage
(
encryptedAliceToBobMsg1
);
...
...
@@ -404,8 +437,6 @@ public class OlmSessionTest {
// MESSAGE COMPARISON: decrypted vs encrypted
assertTrue
(
helloClearMsg
.
equals
(
decryptedMsg01
));
assertTrue
(
0
==
bobAccount
.
removeOneTimeKeysForSession
(
bobSession
));
// BACK/FORTH MESSAGE COMPARISON
String
clearMsg1
=
"Hello I'm Bob!"
;
String
clearMsg2
=
"Isn't life grand?"
;
...
...
@@ -451,6 +482,7 @@ public class OlmSessionTest {
assertTrue
(
clearMsg3
.
equals
(
decryptedMsg3
));
// clean objects..
assertTrue
(
0
==
bobAccount
.
removeOneTimeKeysForSession
(
bobSession
));
bobAccount
.
releaseAccount
();
aliceAccount
.
releaseAccount
();
bobSession
.
releaseSession
();
...
...
@@ -473,4 +505,91 @@ public class OlmSessionTest {
Log
.
e
(
LOG_TAG
,
"## test03SessionSerialization(): Exception Msg=="
+
e
.
getMessage
());
}
}
// ****************************************************
// *************** SANITY CHECK TESTS *****************
// ****************************************************
@Test
public
void
test06SanityCheckErrors
()
{
final
int
ONE_TIME_KEYS_NUMBER
=
5
;
OlmAccount
bobAccount
=
null
;
OlmAccount
aliceAccount
=
null
;
// ALICE & BOB ACCOUNTS CREATION
try
{
aliceAccount
=
new
OlmAccount
();
bobAccount
=
new
OlmAccount
();
}
catch
(
OlmException
e
)
{
assertTrue
(
e
.
getMessage
(),
false
);