| # |
| # Copyright OpenEmbedded Contributors |
| # |
| # SPDX-License-Identifier: MIT |
| # |
| |
| import glob |
| import os |
| import shutil |
| import tempfile |
| from oeqa.selftest.case import OESelftestTestCase |
| from oeqa.utils.commands import runCmd, bitbake, get_bb_vars |
| |
| |
| class oeGoToolchainSelfTest(OESelftestTestCase): |
| """ |
| Test cases for OE's Go toolchain |
| """ |
| |
| @staticmethod |
| def get_sdk_environment(tmpdir_SDKQA): |
| pattern = os.path.join(tmpdir_SDKQA, "environment-setup-*") |
| # FIXME: this is a very naive implementation |
| return glob.glob(pattern)[0] |
| |
| @staticmethod |
| def get_sdk_toolchain(): |
| bb_vars = get_bb_vars(['SDK_DEPLOY', 'TOOLCHAIN_OUTPUTNAME'], |
| "meta-go-toolchain") |
| sdk_deploy = bb_vars['SDK_DEPLOY'] |
| toolchain_name = bb_vars['TOOLCHAIN_OUTPUTNAME'] |
| return os.path.join(sdk_deploy, toolchain_name + ".sh") |
| |
| @classmethod |
| def setUpClass(cls): |
| super(oeGoToolchainSelfTest, cls).setUpClass() |
| cls.tmpdir_SDKQA = tempfile.mkdtemp(prefix='SDKQA') |
| cls.go_path = os.path.join(cls.tmpdir_SDKQA, "go") |
| # Build the SDK and locate it in DEPLOYDIR |
| bitbake("meta-go-toolchain") |
| cls.sdk_path = oeGoToolchainSelfTest.get_sdk_toolchain() |
| # Install the SDK into the tmpdir |
| runCmd("sh %s -y -d \"%s\"" % (cls.sdk_path, cls.tmpdir_SDKQA)) |
| cls.env_SDK = oeGoToolchainSelfTest.get_sdk_environment(cls.tmpdir_SDKQA) |
| |
| @classmethod |
| def tearDownClass(cls): |
| shutil.rmtree(cls.tmpdir_SDKQA, ignore_errors=True) |
| super(oeGoToolchainSelfTest, cls).tearDownClass() |
| |
| def run_sdk_go_command(self, gocmd, proj, name): |
| cmd = "cd %s/src/%s/%s; " % (self.go_path, proj, name) |
| cmd = cmd + ". %s; " % self.env_SDK |
| cmd = cmd + "export GOPATH=%s; " % self.go_path |
| cmd = cmd + "export GOFLAGS=-modcacherw; " |
| cmd = cmd + "export CGO_ENABLED=1; " |
| cmd = cmd + "${CROSS_COMPILE}go %s" % gocmd |
| return runCmd(cmd).status |
| |
| def test_go_dep_build(self): |
| proj = "github.com/direnv" |
| name = "direnv" |
| ver = "v2.27.0" |
| archive = ".tar.gz" |
| url = "https://%s/%s/archive/%s%s" % (proj, name, ver, archive) |
| |
| runCmd("cd %s; wget %s" % (self.tmpdir_SDKQA, url)) |
| runCmd("cd %s; tar -xf %s" % (self.tmpdir_SDKQA, ver+archive)) |
| runCmd("mkdir -p %s/src/%s" % (self.go_path, proj)) |
| runCmd("mv %s/direnv-2.27.0 %s/src/%s/%s" |
| % (self.tmpdir_SDKQA, self.go_path, proj, name)) |
| retv = self.run_sdk_go_command('build', proj, name) |
| self.assertEqual(retv, 0, |
| msg="Running go build failed for %s" % name) |