aboutsummaryrefslogtreecommitdiff
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2016-2017, 2024 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.

(define-module (test-modules)
  #:use-module (guix modules)
  #:use-module ((guix build-system gnu) #:select (%default-gnu-imported-modules))
  #:use-module ((guix utils) #:select (call-with-temporary-directory))
  #:use-module (srfi srfi-1)
  #:use-module (srfi srfi-34)
  #:use-module (srfi srfi-64))

(test-begin "modules")

(test-assert "closure of (guix build gnu-build-system)"
  (lset= equal?
         (live-module-closure '((guix build gnu-build-system)))
         (source-module-closure '((guix build gnu-build-system)))
         %default-gnu-imported-modules
         (source-module-closure %default-gnu-imported-modules)
         (live-module-closure %default-gnu-imported-modules)))

(test-assert "closure of (gnu build install)"
  (lset= equal?
         (live-module-closure '((gnu build install)))
         (source-module-closure '((gnu build install)))))

(test-assert "closure of (gnu build image)"
  (lset= equal?
         (live-module-closure '((gnu build image)))
         (source-module-closure '((gnu build image)))))

(test-equal "&missing-dependency-error"
  '(something that does not exist)
  (call-with-temporary-directory
   (lambda (directory)
     (call-with-output-file (string-append directory "/foobar.scm")
       (lambda (port)
         (write '(define-module (foobar)
                   #:use-module (something that does not exist))
                port)))

     (call-with-output-file (string-append directory "/baz.scm")
       (lambda (port)
         (write '(define-module (baz)
                   #:use-module (foobar))
                port)))

     (guard (c ((missing-dependency-error? c)
                (missing-dependency-module c)))
       (source-module-closure '((baz)) (list directory)
                              #:select? (const #t))))))

(test-equal "file-name->module-name"
  '(guix foo)
  (file-name->module-name "guix/foo.scm"))

(test-equal "file-name->module-name, leading dot"
  '(guix foo)
  (file-name->module-name "./guix/foo.scm"))

(test-end)
>- ip netns exec $NAMESPACE_NAME ip addr add dev "$1" \
- "$4/${ifconfig_netmask:-30}" \
- ${ifconfig_broadcast:+broadcast "$ifconfig_broadcast"}
- if [ -n "$ifconfig_ipv6_local" ]; then
- ip netns exec $NAMESPACE_NAME ip addr add dev "$1" \
- "$ifconfig_ipv6_local"/112
- fi
+ ip netns add $NAMESPACE_NAME
+ ip netns exec $NAMESPACE_NAME ip link set dev lo up
+ ip link set dev "$1" up netns $NAMESPACE_NAME mtu "$2"
+ ip netns exec $NAMESPACE_NAME ip addr add dev "$1" \
+ "$4/${ifconfig_netmask:-30}" \
+ ${ifconfig_broadcast:+broadcast "$ifconfig_broadcast"}
+ if [ -n "$ifconfig_ipv6_local" ]; then
+ ip netns exec $NAMESPACE_NAME ip addr add dev "$1" \
+ "$ifconfig_ipv6_local"/112
+ fi
- # the following is done to enable some connections to bypass vpn
- VETH0=v0tdns${WRAPPER_PID}_0
- VETH1=v0tdns${WRAPPER_PID}_1
- ip link add $VETH0 type veth peer name $VETH1
- ip link set $VETH1 netns $NAMESPACE_NAME
- ip addr add $VETH_HOST0/30 dev $VETH0
- ip netns exec $NAMESPACE_NAME ip addr add $VETH_HOST1/30 dev $VETH1
- ip link set $VETH0 up
- ip netns exec $NAMESPACE_NAME ip link set $VETH1 up
- ;;
- route-up)
- # user is responsible for enabling routing from physical
- # interface to veth devices, we're enabling the reverse way
- echo 1 > /proc/sys/net/ipv4/conf/$VETH0/forwarding
-
- ip netns exec $NAMESPACE_NAME ip route add default via "$ifconfig_remote"
-
- if [ -n "$ifconfig_ipv6_remote" ]; then
- ip netns exec $NAMESPACE_NAME ip route add default via \
- "$ifconfig_ipv6_remote"
- fi
+ # the following is done to enable some connections to bypass vpn
+ VETH0=v0tdns${WRAPPER_PID}_0
+ VETH1=v0tdns${WRAPPER_PID}_1
+ ip link add $VETH0 type veth peer name $VETH1
+ ip link set $VETH1 netns $NAMESPACE_NAME
+ ip addr add $VETH_HOST0/30 dev $VETH0
+ ip netns exec $NAMESPACE_NAME ip addr add $VETH_HOST1/30 dev $VETH1
+ ip link set $VETH0 up
+ ip netns exec $NAMESPACE_NAME ip link set $VETH1 up
+ ;;
+ route-up)
+ # user is responsible for enabling routing from physical
+ # interface to veth devices, we're enabling the reverse way
+ echo 1 > /proc/sys/net/ipv4/conf/$VETH0/forwarding
- # here go routes for bypassing vpn
- for ADDRESS in $ROUTE_THROUGH_VETH; do
- ip netns exec $NAMESPACE_NAME ip route add $ADDRESS via $VETH_HOST0
- iptables -t nat -A POSTROUTING -s $VETH_HOST1/32 \
- -j SNAT --to-source $PHYSICAL_IP
- done
+ ip netns exec $NAMESPACE_NAME ip route add default \
+ via "$ifconfig_remote"
-
- # notify our sh process, that openvpn finished initializing
- kill -usr1 $WRAPPER_PID
- ;;
- down)
- for ADDRESS in $ROUTE_THROUGH_VETH; do
- iptables -t nat -D POSTROUTING -s $VETH_HOST1/32 \
- -j SNAT --to-source $PHYSICAL_IP
- done
+ if [ -n "$ifconfig_ipv6_remote" ]; then
+ ip netns exec $NAMESPACE_NAME ip route add default via \
+ "$ifconfig_ipv6_remote"
+ fi
- ip netns delete $NAMESPACE_NAME
- ;;
+ # here go routes for bypassing vpn
+ for ADDRESS in $ROUTE_THROUGH_VETH; do
+ ip netns exec $NAMESPACE_NAME ip route add $ADDRESS via $VETH_HOST0
+ iptables -t nat -A POSTROUTING -s $VETH_HOST1/32 \
+ -j SNAT --to-source $PHYSICAL_IP
+ done
+
+
+ # notify our sh process, that openvpn finished initializing
+ kill -usr1 $WRAPPER_PID
+ ;;
+ down)
+ for ADDRESS in $ROUTE_THROUGH_VETH; do
+ iptables -t nat -D POSTROUTING -s $VETH_HOST1/32 \
+ -j SNAT --to-source $PHYSICAL_IP
+ done
+
+ ip netns delete $NAMESPACE_NAME
+ ;;
esac