encoded, err := serializer.Marshal(logger, format.LEGACY_FORMATTING, task) Expect(err).NotTo(HaveOccurred()) Expect(encoded).To(MatchJSON(jsonEncodedTask)) }) }) Describe("FORMATTED_JSON", func() { It("marshals the data as json with an UNENCODED envelope", func() { jsonEncodedTask, err := json.Marshal(task) Expect(err).NotTo(HaveOccurred()) encoded, err := serializer.Marshal(logger, format.FORMATTED_JSON, task) Expect(err).NotTo(HaveOccurred()) unencoded, err := encoder.Decode(encoded) Expect(err).NotTo(HaveOccurred()) Expect(unencoded[0]).To(BeEquivalentTo(format.JSON)) Expect(unencoded[2:]).To(MatchJSON(jsonEncodedTask)) }) }) Describe("ENCODED_PROTO", func() { It("marshals the data as protobuf with an base64 encoded envelope", func() { encoded, err := serializer.Marshal(logger, format.ENCODED_PROTO, task) Expect(err).NotTo(HaveOccurred()) unencoded, err := encoder.Decode(encoded) Expect(err).NotTo(HaveOccurred())
Expect(err).NotTo(HaveOccurred()) _, err = storeClient.Set(fmt.Sprintf("%s/my/nested/key-2", etcd.V1SchemaRoot), encoded2, etcd.NO_TTL) Expect(err).NotTo(HaveOccurred()) cryptor = makeCryptor("new", "old") etcdDB = etcd.NewETCD(format.ENCRYPTED_PROTO, 100, 100, DesiredLRPCreationTimeout, cryptor, storeClient, clock) err = etcdDB.PerformEncryption(logger) Expect(err).NotTo(HaveOccurred()) cryptor = makeCryptor("new") encoder = format.NewEncoder(cryptor) res, err := storeClient.Get(fmt.Sprintf("%s/my/key-1", etcd.V1SchemaRoot), false, false) Expect(err).NotTo(HaveOccurred()) decrypted1, err := encoder.Decode([]byte(res.Node.Value)) Expect(err).NotTo(HaveOccurred()) Expect(decrypted1).To(Equal(value1)) res, err = storeClient.Get(fmt.Sprintf("%s/my/nested/key-2", etcd.V1SchemaRoot), false, false) Expect(err).NotTo(HaveOccurred()) decrypted2, err := encoder.Decode([]byte(res.Node.Value)) Expect(err).NotTo(HaveOccurred()) Expect(decrypted2).To(Equal(value2)) }) It("does not fail encryption if it can't read a record", func() { var cryptor encryption.Cryptor var encoder format.Encoder value1 := []byte("some text")
Describe("unkown encoding", func() { It("fails with an unknown encoding error", func() { payload := []byte("some-payload") _, err := encoder.Encode(format.Encoding([2]byte{'9', '9'}), payload) Expect(err).To(HaveOccurred()) }) }) }) Describe("Decode", func() { Describe("LEGACY_UNENCODED", func() { It("returns the payload back", func() { payload := []byte("some-payload") decoded, err := encoder.Decode(payload) Expect(err).NotTo(HaveOccurred()) Expect(decoded).To(Equal(payload)) }) }) Describe("UNENCODED", func() { It("returns the payload back without an encoding type prefix", func() { payload := []byte("some-payload") decoded, err := encoder.Decode(append([]byte("00"), payload...)) Expect(err).NotTo(HaveOccurred()) Expect(decoded).To(Equal(payload)) }) })
sqlDB := sqldb.NewSQLDB(db, 5, 5, format.ENCRYPTED_PROTO, cryptor, fakeGUIDProvider, fakeClock, dbFlavor) err = sqlDB.PerformEncryption(logger) Expect(err).NotTo(HaveOccurred()) cryptor = makeCryptor("new") encoder = format.NewEncoder(cryptor) var result []byte queryStr = "SELECT task_definition FROM tasks WHERE guid = ?" if test_helpers.UsePostgres() { queryStr = test_helpers.ReplaceQuestionMarks(queryStr) } row := db.QueryRow(queryStr, taskGuid) err = row.Scan(&result) Expect(err).NotTo(HaveOccurred()) decryptedTaskDef, err := encoder.Decode(result) Expect(err).NotTo(HaveOccurred()) Expect(decryptedTaskDef).To(Equal(unencodedTaskDef)) var runInfo, routes, volumePlacement []byte queryStr = "SELECT run_info, routes, volume_placement FROM desired_lrps WHERE process_guid = ?" if test_helpers.UsePostgres() { queryStr = test_helpers.ReplaceQuestionMarks(queryStr) } row = db.QueryRow(queryStr, processGuid) err = row.Scan(&runInfo, &routes, &volumePlacement) Expect(err).NotTo(HaveOccurred()) decryptedRunInfo, err := encoder.Decode(runInfo) Expect(decryptedRunInfo).To(Equal(unencodedRunInfo)) Expect(err).NotTo(HaveOccurred())
sqlDB := sqldb.NewSQLDB(db, 5, 5, format.ENCRYPTED_PROTO, cryptor, fakeGUIDProvider, fakeClock, dbFlavor) err = sqlDB.PerformEncryption(logger) Expect(err).NotTo(HaveOccurred()) cryptor = makeCryptor("new") encoder = format.NewEncoder(cryptor) var result []byte queryStr = "SELECT task_definition FROM tasks WHERE guid = ?" if test_helpers.UsePostgres() { queryStr = test_helpers.ReplaceQuestionMarks(queryStr) } row := db.QueryRow(queryStr, taskGuid) err = row.Scan(&result) Expect(err).NotTo(HaveOccurred()) decrypted1, err := encoder.Decode(result) Expect(err).NotTo(HaveOccurred()) Expect(decrypted1).To(Equal(value1)) var runInfo, volumePlacement []byte queryStr = "SELECT run_info, volume_placement FROM desired_lrps WHERE process_guid = ?" if test_helpers.UsePostgres() { queryStr = test_helpers.ReplaceQuestionMarks(queryStr) } row = db.QueryRow(queryStr, processGuid) err = row.Scan(&runInfo, &volumePlacement) Expect(err).NotTo(HaveOccurred()) decrypted2, err := encoder.Decode(runInfo) Expect(err).NotTo(HaveOccurred()) decrypted3, err := encoder.Decode(volumePlacement) Expect(err).NotTo(HaveOccurred())