Example #1
0
    def test_file_context(self):
        response = None

        with open("threats/test_data/boss.gif", "rb") as boss_reader:
            file_data = boss_reader.read()
            boss_reader.seek(0)
            response = self.client.post('/', {
                'artifact': '{"type": "file.content"}',
                'file': boss_reader
            },
                                        format="multipart")

        upload_file_args = {
            "name": "boss.gif",
            "content_type": "application/octet-stream",
            "size": 29927,
            "charset": None,
        }

        self.assertEqual(response.status_code, 200)

        temp_file = TemporaryUploadedFile(**upload_file_args)
        temp_file.write(file_data)
        temp_file.flush()

        context = SearchContext({"type": "file.content", "value": temp_file})
        context.save()

        self.assertEqual(context.file_data_len, len(file_data))

        loaded_context = SearchContext.load(context.id)
        self.assertEqual(loaded_context.base64_file_data_len,
                         context.base64_file_data_len)
        self.assertEqual(loaded_context.file_data_len, context.file_data_len)

        with open(loaded_context.value.temporary_file_path(),
                  "rb") as temp_file:
            loaded_file_data = temp_file.read()

        for counter in range(0, len(loaded_file_data) // 100):
            begin = counter * 100
            end = begin + 100
            self.assertEqual(file_data[begin:end], loaded_file_data[begin:end])

        self.assertEqual(len(file_data), len(loaded_file_data))