# -*- coding: utf-8 -*-
"""
integration tests for mac_xattr
"""
from __future__ import absolute_import, print_function, unicode_literals

import os

from tests.support.case import ModuleCase
from tests.support.helpers import runs_on, skip_if_binaries_missing, slowTest
from tests.support.runtests import RUNTIME_VARS


@runs_on(kernel="Darwin")
@skip_if_binaries_missing("xattr")
class MacXattrModuleTest(ModuleCase):
    """
    Validate the mac_xattr module
    """

    @classmethod
    def setUpClass(cls):
        cls.test_file = os.path.join(RUNTIME_VARS.TMP, "xattr_test_file.txt")
        cls.no_file = os.path.join(RUNTIME_VARS.TMP, "xattr_no_file.txt")

    def setUp(self):
        """
        Create test file for testing extended attributes
        """
        self.run_function("file.touch", [self.test_file])

    def tearDown(self):
        """
        Clean up test file
        """
        if os.path.exists(self.test_file):
            os.remove(self.test_file)

    @slowTest
    def test_list_no_xattr(self):
        """
        Make sure there are no attributes
        """
        # Clear existing attributes
        self.assertTrue(self.run_function("xattr.clear", [self.test_file]))

        # Test no attributes
        self.assertEqual(self.run_function("xattr.list", [self.test_file]), {})

        # Test file not found
        self.assertEqual(
            self.run_function("xattr.list", [self.no_file]),
            "ERROR: File not found: {0}".format(self.no_file),
        )

    @slowTest
    def test_write(self):
        """
        Write an attribute
        """
        # Clear existing attributes
        self.assertTrue(self.run_function("xattr.clear", [self.test_file]))

        # Write some attributes
        self.assertTrue(
            self.run_function(
                "xattr.write", [self.test_file, "spongebob", "squarepants"]
            )
        )
        self.assertTrue(
            self.run_function("xattr.write", [self.test_file, "squidward", "plankton"])
        )
        self.assertTrue(
            self.run_function("xattr.write", [self.test_file, "crabby", "patty"])
        )

        # Test that they were actually added
        self.assertEqual(
            self.run_function("xattr.list", [self.test_file]),
            {"spongebob": "squarepants", "squidward": "plankton", "crabby": "patty"},
        )

        # Test file not found
        self.assertEqual(
            self.run_function("xattr.write", [self.no_file, "patrick", "jellyfish"]),
            "ERROR: File not found: {0}".format(self.no_file),
        )

    @slowTest
    def test_read(self):
        """
        Test xattr.read
        """
        # Clear existing attributes
        self.assertTrue(self.run_function("xattr.clear", [self.test_file]))

        # Write an attribute
        self.assertTrue(
            self.run_function(
                "xattr.write", [self.test_file, "spongebob", "squarepants"]
            )
        )

        # Read the attribute
        self.assertEqual(
            self.run_function("xattr.read", [self.test_file, "spongebob"]),
            "squarepants",
        )

        # Test file not found
        self.assertEqual(
            self.run_function("xattr.read", [self.no_file, "spongebob"]),
            "ERROR: File not found: {0}".format(self.no_file),
        )

        # Test attribute not found
        self.assertEqual(
            self.run_function("xattr.read", [self.test_file, "patrick"]),
            "ERROR: Attribute not found: patrick",
        )

    @slowTest
    def test_delete(self):
        """
        Test xattr.delete
        """
        # Clear existing attributes
        self.assertTrue(self.run_function("xattr.clear", [self.test_file]))

        # Write some attributes
        self.assertTrue(
            self.run_function(
                "xattr.write", [self.test_file, "spongebob", "squarepants"]
            )
        )
        self.assertTrue(
            self.run_function("xattr.write", [self.test_file, "squidward", "plankton"])
        )
        self.assertTrue(
            self.run_function("xattr.write", [self.test_file, "crabby", "patty"])
        )

        # Delete an attribute
        self.assertTrue(
            self.run_function("xattr.delete", [self.test_file, "squidward"])
        )

        # Make sure it was actually deleted
        self.assertEqual(
            self.run_function("xattr.list", [self.test_file]),
            {"spongebob": "squarepants", "crabby": "patty"},
        )

        # Test file not found
        self.assertEqual(
            self.run_function("xattr.delete", [self.no_file, "spongebob"]),
            "ERROR: File not found: {0}".format(self.no_file),
        )

        # Test attribute not found
        self.assertEqual(
            self.run_function("xattr.delete", [self.test_file, "patrick"]),
            "ERROR: Attribute not found: patrick",
        )

    @slowTest
    def test_clear(self):
        """
        Test xattr.clear
        """
        # Clear existing attributes
        self.assertTrue(self.run_function("xattr.clear", [self.test_file]))

        # Write some attributes
        self.assertTrue(
            self.run_function(
                "xattr.write", [self.test_file, "spongebob", "squarepants"]
            )
        )
        self.assertTrue(
            self.run_function("xattr.write", [self.test_file, "squidward", "plankton"])
        )
        self.assertTrue(
            self.run_function("xattr.write", [self.test_file, "crabby", "patty"])
        )

        # Test Clear
        self.assertTrue(self.run_function("xattr.clear", [self.test_file]))

        # Test file not found
        self.assertEqual(
            self.run_function("xattr.clear", [self.no_file]),
            "ERROR: File not found: {0}".format(self.no_file),
        )

@@ -1,28 +1,4 @@
-# -*- coding: utf-8 -*-%0A
 %22%22%22%0A
@@ -36,81 +36,8 @@
 %0A%22%22%22
-%0Afrom __future__ import absolute_import, print_function, unicode_literals
 %0A%0Aim
@@ -1361,33 +1361,32 @@
 ile not found: %7B
-0
 %7D%22.format(self.n
@@ -2440,33 +2440,32 @@
 ile not found: %7B
-0
 %7D%22.format(self.n
@@ -3198,33 +3198,32 @@
 ile not found: %7B
-0
 %7D%22.format(self.n
@@ -4581,33 +4581,32 @@
 ile not found: %7B
-0
 %7D%22.format(self.n
@@ -5663,32 +5663,32 @@
 self.no_file%5D),%0A
+
             %22ERR
@@ -5712,9 +5712,8 @@
 d: %7B
-0
 %7D%22.f

Drop Py2 and six on tests/integration/modules/test_mac_xattr.py