66 "io/ioutil"
77 "math/rand"
88 "os"
9+ "os/exec"
910 "path/filepath"
1011 "strings"
1112 "testing"
@@ -560,6 +561,10 @@ func TestEncryptedZoneWriteChunks(t *testing.T) {
560561 bytes , err := ioutil .ReadAll (reader )
561562 require .NoError (t , err )
562563 assert .Equal (t , originalText , bytes )
564+
565+ hdfsOut , err := exec .Command ("hadoop" , "dfs" , "-cat" , "/_test/kms/write_chunks.txt" ).Output ()
566+ require .NoError (t , err )
567+ assert .Equal (t , originalText , hdfsOut )
563568}
564569
565570func TestEncryptedZoneAppendChunks (t * testing.T ) {
@@ -586,28 +591,65 @@ func TestEncryptedZoneAppendChunks(t *testing.T) {
586591 bytes , err := ioutil .ReadAll (reader )
587592 require .NoError (t , err )
588593 assert .Equal (t , originalText , bytes )
594+
595+ hdfsOut , err := exec .Command ("hadoop" , "dfs" , "-cat" , "/_test/kms/append_chunks.txt" ).Output ()
596+ require .NoError (t , err )
597+ assert .Equal (t , originalText , hdfsOut )
589598}
590599
591600func TestEncryptedZoneLargeBlock (t * testing.T ) {
592601 skipWithoutEncryptedZone (t )
593602
594- // Generate quite large (aesChunkSize * 1.5 bytes) block, so we can trigger encryption in chunks.
595- str := "some random text"
596- originalText := []byte (strings .Repeat (str , aesChunkSize * 1.5 / len (str )))
603+ // Generate quite large data block, so we can trigger encryption in chunks.
604+ mobydick , err := os .Open ("testdata/mobydick.txt" )
605+ require .NoError (t , err )
606+ originalText , err := ioutil .ReadAll (mobydick )
607+ require .NoError (t , err )
597608 client := getClient (t )
598609
599610 // Create file with small (128Kb) block size, so encrypted chunk will be placed over multiple hdfs blocks.
600- writer , err := client .CreateFile ("/_test/kms/large_write.txt " , 1 , 131072 , 0755 )
611+ writer , err := client .CreateFile ("/_test/kms/mobydick.unittest " , 1 , 131072 , 0755 )
601612 require .NoError (t , err )
602613
603614 _ , err = writer .Write (originalText )
604615 require .NoError (t , err )
605616 assertClose (t , writer )
606617
607- reader , err := client .Open ("/_test/kms/large_write.txt " )
618+ reader , err := client .Open ("/_test/kms/mobydick.unittest " )
608619 require .NoError (t , err )
620+ bytes , err := ioutil .ReadAll (reader )
621+ require .NoError (t , err )
622+ assert .Equal (t , originalText , bytes )
609623
624+ // Ensure read after seek works as expected:
625+ _ , err = reader .Seek (35657 , io .SeekStart )
626+ require .NoError (t , err )
627+ bytes = make ([]byte , 64 )
628+ _ , err = reader .Read (bytes )
629+ require .NoError (t , err )
630+ assert .Equal (t , []byte ("By reason of these things, then, the whaling voyage was welcome;" ), bytes )
631+
632+ hdfsOut , err := exec .Command ("hadoop" , "dfs" , "-cat" , "/_test/kms/mobydick.unittest" ).Output ()
633+ require .NoError (t , err )
634+ assert .Equal (t , originalText , hdfsOut )
635+ }
636+
637+ func TestEncryptedZoneReadAfterJava (t * testing.T ) {
638+ skipWithoutEncryptedZone (t )
639+
640+ err := exec .Command ("hadoop" , "dfs" , "-copyFromLocal" , "testdata/mobydick.txt" , "/_test/kms/mobydick.java" ).Run ()
641+ require .NoError (t , err )
642+
643+ mobydick , err := os .Open ("testdata/mobydick.txt" )
644+ require .NoError (t , err )
645+ originalText , err := ioutil .ReadAll (mobydick )
646+ require .NoError (t , err )
647+
648+ client := getClient (t )
649+ reader , err := client .Open ("/_test/kms/mobydick.java" )
650+ require .NoError (t , err )
610651 bytes , err := ioutil .ReadAll (reader )
611652 require .NoError (t , err )
653+
612654 assert .Equal (t , originalText , bytes )
613655}
0 commit comments