77import static junit .framework .TestCase .fail ;
88
99import android .content .Context ;
10- import androidx . test . platform . app . InstrumentationRegistry ;
10+
1111import androidx .test .ext .junit .runners .AndroidJUnit4 ;
12+ import androidx .test .platform .app .InstrumentationRegistry ;
1213
14+ import org .json .JSONException ;
1315import org .json .JSONObject ;
1416import org .junit .After ;
1517import org .junit .Before ;
1618import org .junit .Test ;
1719import org .junit .runner .RunWith ;
1820
1921import java .io .File ;
20- import java .io .FileInputStream ;
2122import java .io .IOException ;
22- import java .util .ArrayList ;
2323import java .util .HashMap ;
2424import java .util .LinkedHashMap ;
2525import java .util .List ;
2626import java .util .Map ;
2727
28+
2829@ RunWith (AndroidJUnit4 .class )
2930public class BacktraceBreadcrumbsTest {
3031 public Context context ;
@@ -37,7 +38,6 @@ public class BacktraceBreadcrumbsTest {
3738 @ Before
3839 public void setUp () {
3940 this .context = InstrumentationRegistry .getInstrumentation ().getContext ();
40-
4141 backtraceBreadcrumbs = new BacktraceBreadcrumbs (context .getFilesDir ().getAbsolutePath ());
4242 backtraceBreadcrumbs .enableBreadcrumbs (context );
4343 }
@@ -53,7 +53,7 @@ public void testAddBreadcrumb() {
5353 try {
5454 assertTrue (backtraceBreadcrumbs .addBreadcrumb ("Test" ));
5555
56- List <String > breadcrumbLogFileData = readBreadcrumbLogFile ();
56+ List <String > breadcrumbLogFileData = BreadcrumbsReader . readBreadcrumbLogFile (context . getFilesDir (). getAbsolutePath () );
5757
5858 // First breadcrumb is configuration breadcrumb
5959 // We start from the second breadcrumb
@@ -70,7 +70,7 @@ public void testClearBreadcrumbs() {
7070 try {
7171 assertTrue (backtraceBreadcrumbs .addBreadcrumb ("Test" ));
7272
73- List <String > breadcrumbLogFileData = readBreadcrumbLogFile ();
73+ List <String > breadcrumbLogFileData = BreadcrumbsReader . readBreadcrumbLogFile (context . getFilesDir (). getAbsolutePath () );
7474 assertEquals (2 , breadcrumbLogFileData .size ());
7575
7676 // First breadcrumb is configuration breadcrumb
@@ -83,7 +83,7 @@ public void testClearBreadcrumbs() {
8383
8484 // Should have cleared the breadcrumb we just read but
8585 // We should still have a configuration breadcrumb
86- breadcrumbLogFileData = readBreadcrumbLogFile ();
86+ breadcrumbLogFileData = BreadcrumbsReader . readBreadcrumbLogFile (context . getFilesDir (). getAbsolutePath () );
8787 assertEquals (1 , breadcrumbLogFileData .size ());
8888 parsedBreadcrumb = new JSONObject (breadcrumbLogFileData .get (0 ));
8989
@@ -103,7 +103,7 @@ public void testEnableBreadcrumbs() {
103103
104104 assertTrue (backtraceBreadcrumbs .addBreadcrumb ("Test" ));
105105
106- List <String > breadcrumbLogFileData = readBreadcrumbLogFile ();
106+ List <String > breadcrumbLogFileData = BreadcrumbsReader . readBreadcrumbLogFile (context . getFilesDir (). getAbsolutePath () );
107107
108108 // First breadcrumb is configuration breadcrumb
109109 // We start from the second breadcrumb
@@ -126,7 +126,7 @@ public void testAddBreadcrumbWithAttributes() {
126126
127127 backtraceBreadcrumbs .addBreadcrumb ("Test" , attributes );
128128
129- List <String > breadcrumbLogFileData = readBreadcrumbLogFile ();
129+ List <String > breadcrumbLogFileData = BreadcrumbsReader . readBreadcrumbLogFile (context . getFilesDir (). getAbsolutePath () );
130130
131131 // First breadcrumb is configuration breadcrumb
132132 // We start from the second breadcrumb
@@ -146,7 +146,7 @@ public void testSpaceInMessage() {
146146 try {
147147 backtraceBreadcrumbs .addBreadcrumb ("Testing 1 2 3" );
148148
149- List <String > breadcrumbLogFileData = readBreadcrumbLogFile ();
149+ List <String > breadcrumbLogFileData = BreadcrumbsReader . readBreadcrumbLogFile (context . getFilesDir (). getAbsolutePath () );
150150
151151 // First breadcrumb is configuration breadcrumb
152152 // We start from the second breadcrumb
@@ -164,7 +164,7 @@ public void testNewlineInMessage() {
164164 try {
165165 backtraceBreadcrumbs .addBreadcrumb ("Testing\n 1 2\n 3\n " );
166166
167- List <String > breadcrumbLogFileData = readBreadcrumbLogFile ();
167+ List <String > breadcrumbLogFileData = BreadcrumbsReader . readBreadcrumbLogFile (context . getFilesDir (). getAbsolutePath () );
168168
169169 // First breadcrumb is configuration breadcrumb
170170 // We start from the second breadcrumb
@@ -188,7 +188,7 @@ public void testInvalidCharsInAttribute() {
188188
189189 backtraceBreadcrumbs .addBreadcrumb ("Test" , attributes );
190190
191- List <String > breadcrumbLogFileData = readBreadcrumbLogFile ();
191+ List <String > breadcrumbLogFileData = BreadcrumbsReader . readBreadcrumbLogFile (context . getFilesDir (). getAbsolutePath () );
192192
193193 // First breadcrumb is configuration breadcrumb
194194 // We start from the second breadcrumb
@@ -208,7 +208,7 @@ public void testLongMessage() {
208208 try {
209209 backtraceBreadcrumbs .addBreadcrumb (longTestMessage );
210210
211- List <String > breadcrumbLogFileData = readBreadcrumbLogFile ();
211+ List <String > breadcrumbLogFileData = BreadcrumbsReader . readBreadcrumbLogFile (context . getFilesDir (). getAbsolutePath () );
212212
213213 // First breadcrumb is configuration breadcrumb
214214 // We start from the second breadcrumb
@@ -230,7 +230,7 @@ public void testLongAttributesLongFirst() {
230230
231231 backtraceBreadcrumbs .addBreadcrumb ("Test" , attributes );
232232
233- List <String > breadcrumbLogFileData = readBreadcrumbLogFile ();
233+ List <String > breadcrumbLogFileData = BreadcrumbsReader . readBreadcrumbLogFile (context . getFilesDir (). getAbsolutePath () );
234234
235235 // First breadcrumb is configuration breadcrumb
236236 // We start from the second breadcrumb
@@ -254,7 +254,7 @@ public void testLongAttributesShortFirst() {
254254
255255 backtraceBreadcrumbs .addBreadcrumb ("Test" , attributes );
256256
257- List <String > breadcrumbLogFileData = readBreadcrumbLogFile ();
257+ List <String > breadcrumbLogFileData = BreadcrumbsReader . readBreadcrumbLogFile (context . getFilesDir (). getAbsolutePath () );
258258
259259 // First breadcrumb is configuration breadcrumb
260260 // We start from the second breadcrumb
@@ -283,7 +283,7 @@ public void testQueueFileShouldNotRollover() {
283283 backtraceBreadcrumbs .addBreadcrumb ("I am a breadcrumb" , attributes );
284284 }
285285
286- List <String > breadcrumbLogFileData = readBreadcrumbLogFile ();
286+ List <String > breadcrumbLogFileData = BreadcrumbsReader . readBreadcrumbLogFile (context . getFilesDir (). getAbsolutePath () );
287287
288288 // First breadcrumb is configuration breadcrumb, it should be valid
289289 JSONObject parsedBreadcrumb = new JSONObject (breadcrumbLogFileData .get (0 ));
@@ -327,7 +327,7 @@ public void testQueueFileRollover() {
327327 breadcrumbsFileSize > 63 * 1024 );
328328
329329 // We should have rolled over the configuration breadcrumb, consider all breadcrumbs here
330- List <String > breadcrumbLogFileData = readBreadcrumbLogFile ();
330+ List <String > breadcrumbLogFileData = BreadcrumbsReader . readBreadcrumbLogFile (context . getFilesDir (). getAbsolutePath () );
331331 for (int i = 0 ; i < breadcrumbLogFileData .size (); i ++) {
332332 JSONObject parsedBreadcrumb = new JSONObject (breadcrumbLogFileData .get (i ));
333333 assertEquals ("I am a breadcrumb" , parsedBreadcrumb .get ("message" ));
@@ -367,7 +367,7 @@ public void testQueueFileShouldNotRolloverCustomMax() {
367367 backtraceBreadcrumbs .addBreadcrumb ("I am a breadcrumb" , attributes );
368368 }
369369
370- List <String > breadcrumbLogFileData = readBreadcrumbLogFile ();
370+ List <String > breadcrumbLogFileData = BreadcrumbsReader . readBreadcrumbLogFile (context . getFilesDir (). getAbsolutePath () );
371371
372372 // First breadcrumb is configuration breadcrumb, it should be valid
373373 JSONObject parsedBreadcrumb = new JSONObject (breadcrumbLogFileData .get (0 ));
@@ -391,42 +391,37 @@ public void testQueueFileShouldNotRolloverCustomMax() {
391391 }
392392
393393 @ Test
394- public void testQueueFileRolloverCustomMax () {
394+ public void testQueueFileRolloverCustomMax () throws IOException , JSONException {
395395 int numIterations = 100 ;
396396 // Cleanup after default BacktraceBreadcrumbs constructor
397397 // Because we want to create our own instance with custom parameters
398398 cleanUp ();
399399
400- try {
401- backtraceBreadcrumbs = new BacktraceBreadcrumbs (context .getFilesDir ().getAbsolutePath ());
402- backtraceBreadcrumbs .enableBreadcrumbs (context , 6400 );
403- // Account for mandatory configuration breadcrumb
404- backtraceBreadcrumbs .setCurrentBreadcrumbId (1 );
405-
406- for (int i = 0 ; i < numIterations ; i ++) {
407- final long threadId = Thread .currentThread ().getId ();
408- Map <String , Object > attributes = new HashMap <String , Object >() {{
409- put ("From Thread" , threadId );
410- }};
411- backtraceBreadcrumbs .addBreadcrumb ("I am a breadcrumb" , attributes );
412- }
413-
414- List <String > breadcrumbLogFileData = readBreadcrumbLogFile ();
400+ backtraceBreadcrumbs = new BacktraceBreadcrumbs (context .getFilesDir ().getAbsolutePath ());
401+ backtraceBreadcrumbs .enableBreadcrumbs (context , 6400 );
402+ // Account for mandatory configuration breadcrumb
403+ backtraceBreadcrumbs .setCurrentBreadcrumbId (1 );
415404
416- // We should have rolled over the configuration breadcrumb, consider all breadcrumbs here
417- for (int i = 0 ; i < breadcrumbLogFileData .size (); i ++) {
418- JSONObject parsedBreadcrumb = new JSONObject (breadcrumbLogFileData .get (i ));
419- assertEquals ("I am a breadcrumb" , parsedBreadcrumb .get ("message" ));
420- assertNotNull (parsedBreadcrumb .getJSONObject ("attributes" ).get ("From Thread" ));
421- assertEquals ("manual" , parsedBreadcrumb .get ("type" ));
422- assertEquals ("info" , parsedBreadcrumb .get ("level" ));
423- // Timestamp should be convertible to a long
424- assertTrue (parsedBreadcrumb .get ("timestamp" ) instanceof Long );
425- assertTrue (((int ) parsedBreadcrumb .get ("id" )) > 45 );
426- }
405+ for (int i = 0 ; i < numIterations ; i ++) {
406+ final long threadId = Thread .currentThread ().getId ();
407+ Map <String , Object > attributes = new HashMap <String , Object >() {{
408+ put ("From Thread" , threadId );
409+ }};
410+ backtraceBreadcrumbs .addBreadcrumb ("I am a breadcrumb" , attributes );
411+ }
427412
428- } catch (Exception ex ) {
429- fail (ex .getMessage ());
413+ List <String > breadcrumbLogFileData = BreadcrumbsReader .readBreadcrumbLogFile (context .getFilesDir ().getAbsolutePath ());
414+
415+ // We should have rolled over the configuration breadcrumb, consider all breadcrumbs here
416+ for (int i = 0 ; i < breadcrumbLogFileData .size (); i ++) {
417+ JSONObject parsedBreadcrumb = new JSONObject (breadcrumbLogFileData .get (i ));
418+ assertEquals ("I am a breadcrumb" , parsedBreadcrumb .get ("message" ));
419+ assertNotNull (parsedBreadcrumb .getJSONObject ("attributes" ).get ("From Thread" ));
420+ assertEquals ("manual" , parsedBreadcrumb .get ("type" ));
421+ assertEquals ("info" , parsedBreadcrumb .get ("level" ));
422+ // Timestamp should be convertible to a long
423+ assertTrue (parsedBreadcrumb .get ("timestamp" ) instanceof Long );
424+ assertTrue (((int ) parsedBreadcrumb .get ("id" )) > 45 );
430425 }
431426 }
432427
@@ -445,7 +440,7 @@ public void breadcrumbsEnduranceTest() {
445440 threads [i ].join ();
446441 }
447442
448- List <String > breadcrumbLogFileData = readBreadcrumbLogFile ();
443+ List <String > breadcrumbLogFileData = BreadcrumbsReader . readBreadcrumbLogFile (context . getFilesDir (). getAbsolutePath () );
449444
450445 // First breadcrumb is configuration breadcrumb
451446 // We start from the second breadcrumb
@@ -497,32 +492,6 @@ public void run() {
497492 }
498493 }
499494
500- public List <String > readBreadcrumbLogFile () throws IOException {
501- BacktraceBreadcrumbs breadcrumbs = new BacktraceBreadcrumbs (context .getFilesDir ().getAbsolutePath ());
502- File breadcrumbLogFile = new File (breadcrumbs .getBreadcrumbLogPath ());
503-
504- List <String > breadcrumbLogFileData = new ArrayList <String >();
505- FileInputStream inputStream = new FileInputStream (breadcrumbLogFile .getAbsolutePath ());
506-
507- // The encoding contains headers for the encoded data
508- // We just throw away lines that don't start with "timestamp
509- StringBuilder stringBuilder = new StringBuilder ();
510- while (inputStream .available () > 0 ) {
511- char c = (char ) inputStream .read ();
512- if (c == '\n' ) {
513- String line = stringBuilder .toString ();
514- if (line .matches (".*timestamp.*" )) {
515- breadcrumbLogFileData .add (line );
516- }
517- stringBuilder = new StringBuilder ();
518- continue ;
519- }
520- stringBuilder .append (c );
521- }
522-
523- return breadcrumbLogFileData ;
524- }
525-
526495 private final String longTestMessage = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ipsum consequat nisl vel pretium lectus quam id. Velit dignissim sodales ut eu sem integer vitae justo. Cursus euismod quis viverra nibh cras pulvinar. Pellentesque adipiscing commodo elit at imperdiet. Pellentesque eu tincidunt tortor aliquam nulla facilisi cras fermentum. Elementum facilisis leo vel fringilla est ullamcorper eget nulla. Purus sit amet luctus venenatis. Non consectetur a erat nam at. Pellentesque id nibh tortor id aliquet lectus proin. Purus semper eget duis at tellus. Sodales ut etiam sit amet nisl purus. Viverra justo nec ultrices dui sapien eget.\n " +
527496 "\n " +
528497 "Et ultrices neque ornare aenean euismod elementum nisi quis eleifend. Ut diam quam nulla porttitor. Vitae elementum curabitur vitae nunc sed. Feugiat sed lectus vestibulum mattis ullamcorper velit sed. A diam sollicitudin tempor id eu nisl nunc. At urna condimentum mattis pellentesque id. Arcu odio ut sem nulla pharetra diam sit amet. Ipsum dolor sit amet consectetur adipiscing elit duis. Adipiscing vitae proin sagittis nisl rhoncus mattis rhoncus. Faucibus interdum posuere lorem ipsum dolor. Aliquet risus feugiat in ante metus dictum at. Pretium aenean pharetra magna ac placerat vestibulum lectus mauris ultrices. Enim nulla aliquet porttitor lacus luctus accumsan. Diam ut venenatis tellus in metus. Facilisi nullam vehicula ipsum a arcu cursus.\n " +
@@ -542,4 +511,4 @@ public List<String> readBreadcrumbLogFile() throws IOException {
542511 private final String reasonableLengthAttributeKey = "reasonablySizedKey" ;
543512
544513 private final String reasonableLengthAttributeValue = "reasonableSizedValue" ;
545- }
514+ }
0 commit comments